2010-09-02 66 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; 
} 

但我得到一个错误 -序列化stdext ::使用的hash_map升压串行化库

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

我在网上搜索了这个错误,但并没有得到太多的帮助。另外,我检查了我的boost安装序列化/ hash_map.hpp中有一个serialize()函数。相同的代码可用于序列化std::deque。任何人都可以告诉我,我应该如何改变它来编译它?

+0

不是你所需的东西,但谷歌Sparsehash图书馆地图来与一些内置的序列化支持,尽管与Boost序列化完全分开。 – doublep 2010-09-07 20:09:03

+0

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

回答

4

首先,在代码顶部插入#define BOOST_HAS_HASH

这改变你的编译错误:

“错误C2039: '调整':是不是 'stdext ::的hash_map < _Kty,_Ty>' 中的一员”。 :D

接下来,如果你评论你的恢复功能,你会看到你的代码工作正常,并输出! <好>

但问题是关于编译器之间的不兼容性。 不幸的是,在'MSVS'和'GCC'中的hash_map的实现是不同的,并且resize是这种差异的一个例子。


接下来解决这个新问题, 只是#include boost/serialization/map.hpphash_collections_load_imp.hpp评论s.resize(bucket_count);(它错误)