Хранение вектора в отображенном в памяти файле

Я пытаюсь сохранить вектор произвольных элементов в файле отображения памяти (сейчас я пытаюсь добиться успеха с вектором целых, но он должен работать с вектором произвольных объектов). Я нашел много документации о том, как сделать это с общей памятью, но не с файлами, отображаемыми в память. Так как я успешно сделал и использовал R-деревья в файле отображения памяти (как вэтот пример), Я пытался повторить процесс с векторами, но я думаю, что мне не хватает какого-то важного элемента, потому что он не работает. Вот мой код:

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);

Возможно, моя последняя строка неверна, потому что «alloc_vec» передается в качестве аргумента конструктору вектора, который этого не ожидает (среди прочего я получаю ошибку/usr/include/c++/4.8/bits/stl_vector.h:248:7: note: candidate expects 0 arguments, 1 provided). Тем не менее, я не знаю, как передать распределитель функции find_or_construc (), что, я полагаю, имеет решающее значение для правильного создания вектора в файле отображения памяти. Удаление(alloc_vec) в конце последней строки возникает еще одна ошибка, которую мне нужно решить:

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");

Любая помощь будет принята с благодарностью.

Ответы на вопрос(1)

Ваш ответ на вопрос