我想序列化一个HashMap到一个文件,反序列化以后。
#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;
}
但是,我得到一个错误 -
错误C2039: '序列化':不是成员 'stdext ::的hash_map <_Kty,_Ty>'
我在网上搜了这个错误,但并没有得到太多的帮助。另外,我在升压安装serialization/hash_map.hpp
检查确实有它serialize()
功能。相同的代码工作了std::deque
的系列化。谁能告诉我,我应该怎么改变它,使其编译?
首先,在所有的,在你的代码的顶部插入#define BOOST_HAS_HASH
。
这改变你的编译错误:
“错误C2039: '调整大小':不是 'stdext ::的hash_map <_Kty,_Ty>' 的成员”。 :d
接下来,如果你对此有何评论你的恢复功能,你会看到你的代码,做工精细和输出! <良好>
但问题是有关编译器之间的不兼容。不幸的是,hash_map
的实现是在“MSVS”和“海湾合作委员会”不同,resize
这种差异的一个例子。
下一步要解决这个新问题,只是#include boost/serialization/map.hpp
和评论s.resize(bucket_count);
在hash_collections_load_imp.hpp
(它错误)