【问题标题】:Serialize stdext::hash_map using boost serialization library使用 boost 序列化库序列化 stdext::hash_map
【发布时间】: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 的序列化。谁能告诉我应该如何更改它以使其编译?

【问题讨论】:

标签: c++ hashmap boost-serialization


【解决方案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);(出错的地方)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2012-09-05
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多