如何序列化包含boost::serialization
的类(boost::optional
)?
即。以下代码在实例化时会出错。
错误C2039:'serialize':不是'boost :: optional'的成员C:\ boost \ boost_1_55_0 \ boost \ serialization \ access.hpp 118
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class MyClass {
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & my_member;
}
boost::optional<int> my_member;
};
int main() {
std::ofstream ofs("filename.txt");
const MyClass g;
boost::archive::text_oarchive oa(ofs);
oa << g;
return 0;
}
我理解可能存在更深层次的问题(当值不存在时,您应该写什么文件?),但必须有一些标准的解决方案。我正在寻找解决这个问题的最简单方法。
答案 0 :(得分:7)
对于boost::optional
,您只需添加#include <boost/serialization/optional.hpp>
它实现了一个非成员序列化函数,允许您序列化boost::optional
而不必担心细节。
它首先保存/加载布尔值t.is_initialized()
,并根据其值决定是否保存/加载其余值。
您可以在此处查看源代码:http://www.boost.org/doc/libs/1_56_0/boost/serialization/optional.hpp