Speichern des Vektors in einer im Speicher abgelegten Datei

Ich versuche, einen Vektor von beliebigen Elementen in einer Speicherzuordnungsdatei zu speichern (im Moment versuche ich, mit einem Vektor von ints erfolgreich zu sein, aber es sollte mit einem Vektor von beliebigen Objekten funktionieren). Ich habe eine Menge Dokumentation zu Shared Memory gefunden, aber nicht zu Memory Mapped Files. Da ich erfolgreich R-Trees im Memory Mapped File erstellt und verwendet habe (wie indas Beispiel), Ich habe versucht, den Prozess mit Vektoren zu replizieren, aber ich vermisse ein entscheidendes Element, weil es nicht funktioniert. Hier ist mein Code:

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

Wahrscheinlich ist meine letzte Zeile falsch, weil "alloc_vec" als Argument an den Vektorkonstruktor übergeben wird, der es nicht erwartet (ich bekomme unter anderem den Fehler/usr/include/c++/4.8/bits/stl_vector.h:248:7: note: candidate expects 0 arguments, 1 provided). Allerdings weiß ich dann nicht, wie ich den Allokator an find_or_construc () übergeben soll. Ich gehe davon aus, dass dies für die ordnungsgemäße Erstellung des Vektors in der Speicherzuordnungsdatei von entscheidender Bedeutung ist. @ Entfern(alloc_vec) am Ende der letzten Zeile führt zu einem weiteren Fehler, den ich schwerer lösen kann:

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

Jede Hilfe wird sehr geschätzt werden.`

Antworten auf die Frage(2)

Ihre Antwort auf die Frage