gpt4 book ai didi

c++ - 使用 boost 序列化库序列化 stdext::hash_map

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:41 26 4
gpt4 key购买 nike

我想将一个 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;
}

但是我收到了一个错误——

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

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

最佳答案

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

这会将您的编译错误更改为:

“错误 C2039:‘resize’:不是‘stdext::hash_map<_Kty,_Ty>’的成员”。 :D

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

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


接下来要解决这个新问题,只是 #include boost/serialization/map.hpp并在 hash_collections_load_imp.hpp 中注释 s.resize(bucket_count); (错误的地方)

关于c++ - 使用 boost 序列化库序列化 stdext::hash_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com