使用 boost 序列化库序列化 stdext::hash_map
Posted
技术标签:
【中文标题】使用 boost 序列化库序列化 stdext::hash_map【英文标题】:Serialize stdext::hash_map using boost serialization library 【发布时间】:2010-09-02 01:31:10 【问题描述】:我想将哈希映射序列化为文件,然后再反序列化。
#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>”的成员
我在网上搜索了这个错误,但没有得到太多帮助。另外,我检查了我的 boost 安装 serialization/hash_map.hpp
确实有一个 serialize()
函数。相同的代码适用于std::deque
的序列化。谁能告诉我应该如何更改它以使其编译?
【问题讨论】:
不是你想要的,但是 Google Sparsehash 库地图带有一些内置的序列化支持,尽管与 Boost 序列化完全分开。 ***.com/questions/23764249/… 【参考方案1】:首先,在代码顶部插入 #define BOOST_HAS_HASH
。
这会将您的编译错误更改为:
“错误 C2039: 'resize' : is not a member of 'stdext::hash_map<_kty>'”。 :D
接下来,如果您评论您的恢复功能,您将看到您的代码工作正常并输出!
但问题在于编译器之间的不兼容。
不幸的是,hash_map
的实现在“MSVS”和“GCC”中是不同的,resize
就是这种差异的一个例子。
接下来要解决这个新问题,
只是#include boost/serialization/map.hpp
并在hash_collections_load_imp.hpp
中评论s.resize(bucket_count);
(出错的地方)
【讨论】:
以上是关于使用 boost 序列化库序列化 stdext::hash_map的主要内容,如果未能解决你的问题,请参考以下文章