使用升压序列化库序列化stdext ::的hash_map

问题描述 投票:2回答:1

我想序列化一个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的系列化。谁能告诉我,我应该怎么改变它,使其编译?

c++ hashmap boost-serialization
1个回答
4
投票

首先,在所有的,在你的代码的顶部插入#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(它错误)

© www.soinside.com 2019 - 2024. All rights reserved.