Almacenamiento de vectores en un archivo mapeado de memoria

Estoy tratando de almacenar un vector de elementos arbitrarios en un archivo mapeado de memoria (por ahora estoy tratando de tener éxito con un vector de entradas pero debería funcionar con el vector de objetos arbitrarios). He encontrado mucha documentación sobre cómo hacerlo con memoria compartida, pero no con archivos de memoria asignados correctamente. Desde que hice y utilicé con éxito R-trees en el archivo mapeado de memoria (como enese ejemplo), Intenté replicar el proceso con vectores, pero supongo que me falta algún elemento crucial porque no funciona. Aquí está mi código:

namespace bi = boost::interprocess;
typedef bi::allocator<std::vector<int>, bi::managed_mapped_file::segment_manager> allocator_vec;
std::string vecFile = "/path/to/my/file/vector.dat";
bi::managed_mapped_file file_vec(bi::open_or_create,vecFile.c_str(), 1000);
allocator_vec alloc_vec(file_vec.get_segment_manager());
std::vector<int> * vecptr = file_vec.find_or_construct<std::vector<int> >("myvector")(alloc_vec);

Probablemente mi última línea es incorrecta, porque "alloc_vec" se pasa como un argumento al constructor de vectores, que no lo espera (obtengo, entre otros, el error/usr/include/c++/4.8/bits/stl_vector.h:248:7: note: candidate expects 0 arguments, 1 provided) Sin embargo, no sé cómo pasar el asignador a find_or_construc (), lo que supongo que es crucial para que el vector se cree correctamente en el archivo mapeado de memoria. Quitando(alloc_vec) al final de la última línea lleva a otro error que tengo más problemas para resolver:

error: cannot convert ‘boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>, boost::interprocess::iset_index>::construct_proxy<std::vector<int> >::type {aka boost::interprocess::ipcdetail::named_proxy<boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>, boost::interprocess::iset_index>, std::vector<int>, false>}’ to ‘std::vector<int>*’ in initialization
std::vector<int> * vecptr = file_vec.find_or_construct<std::vector<int> >("myvector");

Cualquier ayuda será muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta