J'ai regardé la documentation de Boost.Interprocess pendant des heures mais je n'ai toujours pas réussi à comprendre cela. Dans le doc, ils ont an example de créer un vecteur dans la mémoire partagée comme ceci:Comment passer des paramètres à manage_shared_memory.construct() dans Boost.Interprocess
//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef vector<int, ShmemAllocator> MyVector;
int main(int argc, char *argv[])
{
//Create a new segment with given name and size
managed_shared_memory segment(create_only, "MySharedMemory", 65536);
//Initialize shared memory STL-compatible allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
//Construct a vector named "MyVector" in shared memory with argument alloc_inst
MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
Maintenant, je comprends cela. Ce que je suis coincé est comment passer un deuxième paramètre à segment.construct()
pour spécifier le nombre d'éléments. Le document donne interprocessus le prototype de construct()
comme
MyType *ptr = managed_memory_segment.construct<MyType>("Name") (par1, par2...);
mais lorsque je tente
MyVector *myvector = segment.construct<MyVector>("MyVector")(100, alloc_inst);
Je reçois des erreurs de compilation.
Mes questions sont les suivantes:
- qui obtient effectivement passé les paramètres
par1, par2
desegment.construct
, le constructeur de l'objet, par exemplevector
? Ma compréhension est que le paramètre allocator de modèle est passé. Est-ce exact? - Comment puis-je ajouter un autre paramètre, en plus de
alloc_inst
, requis par le constructeur de l'objet créé dans la mémoire partagée?
Il existe très peu d'informations autres que les docs Boost sur ce sujet.