Boost Interprocess, Map
-
Hallo, ich versuche gerade in Boost Interprocess eine HWND indizierte Map aus Vektoren aus Strings zu bauen.
Dabei benutze ich zwecks shared memory die Container-Typen von Boost Interprocess (1.47)
Leider kriege ich Template Compilerfehler, die sich schwer nachvollziehen lassen.
typedefs:
typedef managed_shared_memory::segment_manager segment_manager_t; typedef allocator<char, segment_manager_t> char_allocator; typedef basic_string<char, std::char_traits<char>, char_allocator> char_string; typedef allocator<char_string, segment_manager_t> char_string_allocator; typedef vector<char_string, char_string_allocator> char_string_vector; typedef std::pair<HWND, char_string_vector> HWND_stringvec_pair; typedef allocator<HWND_stringvec_pair, segment_manager_t> HWND_stringvec_allocator; typedef map<HWND, char_string_vector, std::less<HWND>, HWND_stringvec_allocator> HWND_stringvec_map;Jeder direct-access auf die map scheitert an unvorhandenen default constructoren.
wenn ich z. B. sowas mache:
char_string_allocator myAlloc(m_pMem->get_segment_manager()); m_pHwndStringVecMap->insert(HWND_stringvec_map::value_type(hwnd_des_tages, char_string_vector(myAlloc));um dann etwa feuchte träume von map->find(.. zu bekommen, bekomme ich den originellen fehler:
1>c:\boost_1_47\boost\intrusive\detail\utilities.hpp(234): error C3066: Es gibt verschiedene Möglichkeiten, um ein Objekt dieses Typs mit diesen Argumenten aufzurufen. 1> Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.Im Grunde hatte ich nicht vor, die ganze Library zu zerlegen um dem Fehler auf die Spur zu kommen.
Ideen?
Praktisch gesehen, lässt sich die Map einfach nicht gebrauchen.
jemand noch ne idee, wie man besser nachvollziehen kann, wir der compiler zu seinen problemen im template-jungel kommt?
-
Habs jetzt gelöst, in dem ich eine ungeordnete hash<HWND> map gemacht hab...