2010-09-02 1 views
2
I want to serialize a hash map to a file and de-serialize it later on. 

#include <boost/serialization/hash_map.hpp> 
#include <boost/filesystem/fstream.hpp> 
#include <hash_map> 

class A: virtual public B { 
public: 
    friend class boost::serialization::access; 
    stdext::hash_map<std::string, myClass> myClassHashTable; 
    template <class Archive> 
    void serialize(Archive &ar, const unsigned int version) 
    { 
     ar & myClassHashTable; 
    } 
}; 

void A::serializedToDisk() 
{ 
     boost::filesystem::path finalPath(SOME_CONSTANT); 
     // code to create boost::filesystem::ifstream ofs object 
     boost::archive::text_oarchive oa(ofs); 
     oa << myClassHashTable; 
} 
void A::restoreFromDisk() 
{ 
    boost::filesystem::path finalPath(SOME_CONSTANT); 
    // code to create boost::filesystem::ifstream ifs object 
     boost::archive::text_iarchive ia(ifs); 
     ia >> myClassHashTable; 
} 

Но я получаю сообщение об ошибке, как -Serialize stdext :: hash_map используя подталкивание сериализации библиотека

error C2039: 'serialize' : is not a member of 'stdext::hash_map<_Kty,_Ty>' 

Я искал в Интернете за эту ошибку, но не получил большую помощь. Кроме того, я проверил в моей версии установки установки/hash_map.hpp имеет функцию serialize(). Тот же код работал для сериализации std::deque. Может ли кто-нибудь сказать мне, как мне изменить его, чтобы он скомпилировался?

+0

Не совсем то, что вы хотите, но Google Sparsehash карты библиотеки приходят с некоторыми встроенная поддержка сериализации , хотя полностью отделен от сериализации Boost. – doublep

+0

http://stackoverflow.com/questions/23764249/c-boost-serialization-error-for-hash-map-with-custom-objects-as-key/23768271#23768271 – sehe

ответ

4

Прежде всего, вставьте #define BOOST_HAS_HASH в начало вашего кода.

Это изменит вашу ошибку компиляции для:

«C2039 ошибка: 'размер': не является членом 'stdext :: hash_map < _Kty, _Ty>'». : D

Далее, если вы прокомментируете свою функцию восстановления, вы увидите, что ваш код WORK прекрасен и выводится! < Хорошо>

Но проблема в несовместимости между компиляторами. К сожалению, реализация hash_map отличается в «MSVS» и «GCC», а resize - один из примеров этой разницы.


Далее, чтобы решить эту новую проблему, только #include boost/serialization/map.hpp и комментарии s.resize(bucket_count); в hash_collections_load_imp.hpp (где ошибка)

 Смежные вопросы

  • Нет связанных вопросов^_^