【发布时间】:2013-09-28 06:49:41
【问题描述】:
这个问题已经在asked here 和其他几个地方提出,但答案似乎并没有真正解决最新的 Boost 库。
为了说明这个问题,假设我们想要序列化一个包含共享指针 (std::shared_ptr) 的类,以及一个将从文件构建类的静态 load 函数和一个将存储实例到文件:
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <fstream>
#include <memory>
#include <vector>
class A
{
public:
std::shared_ptr<int> v;
void A::Save(char * const filename);
static A * const Load(char * const filename);
//////////////////////////////////
// Boost Serialization:
//
private:
friend class boost::serialization::access;
template<class Archive> void serialize(Archive & ar, const unsigned int file_version)
{
ar & v;
}
};
// save the world to a file:
void A::Save(char * const filename)
{
// create and open a character archive for output
std::ofstream ofs(filename);
// save data to archive
{
boost::archive::text_oarchive oa(ofs);
// write the pointer to file
oa << this;
}
}
// load world from file
A * const A::Load(char * const filename)
{
A * a;
// create and open an archive for input
std::ifstream ifs(filename);
boost::archive::text_iarchive ia(ifs);
// read class pointer from archive
ia >> a;
return a;
}
int main()
{
}
上面的代码生成了一长串以c:\local\boost_1_54_0\boost\serialization\access.hpp(118): error C2039: 'serialize' : is not a member of 'std::shared_ptr<_Ty>' 开头的错误,据我所知,鉴于我已经加载了表面上支持std::shared_ptr 的boost shared_ptr 序列化库,这不应该是真的。我在这里错过了什么?
注意:据我了解,我假设 boost/serialization/shared_ptr.hpp 为 serialize 定义了 serialize 函数std::shared_ptr 是错误的,因此这个问题的正确答案可能是我要么必须定义我自己的serialize 函数为std::shared_ptr 或转换为boost::shared_ptr
【问题讨论】:
标签: c++ boost boost-serialization