Esta es una pregunta embarazosa, pero incluso la documentación bien escrita provista con boost.interprocess no ha sido suficiente para que descubra cómo para hacer esto.Asignadores de C++, pasando específicamente argumentos de constructor a los objetos asignados con boost :: interprocess :: cached_adaptive_pool
Lo que tengo es una instancia cached_adaptive_pool asignador, y quiero utilizarlo para construir un objeto, pasando a lo largo parámetros del constructor:
struct Test {
Test(float argument, bool flag);
Test();
};
// Normal construction
Test obj(10, true);
// Normal dynamic allocation
Test* obj2 = new Test(20, false);
typedef managed_unique_ptr<
Test, boost::interprocess::managed_shared_memory>::type unique_ptr;
// Dynamic allocation where allocator_instance == cached_adaptive_pool,
// using the default constructor
unique_ptr obj3 = allocator_instance.allocate_one()
// As above, but with the non-default constructor
unique_ptr obj4 = allocator_instance ... ???
esto puede muy bien ser un fracaso de mi parte sobre el uso de objetos asignador en general. Pero en cualquier caso, no puedo ver cómo usar este asignador específico, con la interfaz especificada en cached_adaptive_pool para pasar argumentos de constructor a mi objeto.
cached_adaptive_pool
tiene el método: void construct(const pointer & ptr, const_reference v)
pero no entiendo lo que eso significa y no puedo encontrar ejemplos para usarlo.
Mi cabeza ha estado nadando en plantillas todo el día, por lo que una mano amiga, incluso si la respuesta es obvia, será muy apreciada.
Gracias. La primera forma es el tipo de respuesta que esperaba, pero estaba demasiado confundida y cansada como para darme cuenta. La segunda forma 'a.construct (p, 30, true)' no parece ser compatible con este asignador de impulso específico. Es bastante molesto, ya que 'cached_adaptive_pool.construct()' devuelve 'void', tengo que escribir' allocator_t :: puntero obj = allocator.allocate_one(); allocator.construct (obj, Test (30, verdadero)) '? No estoy seguro de qué es peor, usar dos declaraciones para una operación simple o usar una colocación de aspecto un tanto extraño directamente. – porgarmingduod
Puedes hacer que sea una función separada. – UncleBens