如何序列化包含 boost::optional
的类(使用 boost::serialization
)?
即以下代码在实例化时会报错。
error C2039: 'serialize' : is not a member of '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;
}
我知道可能涉及更深层次的问题(当值不存在时你应该向文件写入什么?),但必须有一些标准的解决方案。我正在寻找解决此问题的最简单方法。
最佳答案
对于 boost::optional
你只需要添加 #include <boost/serialization/optional.hpp>
它实现了一个非成员序列化函数,允许您序列化 boost::optional
无需担心细节。
在底层,它首先保存/加载 t.is_initialized()
的 bool 值并根据其值决定是否保存/加载其余部分。
您可以在这里查看源代码:http://www.boost.org/doc/libs/1_56_0/boost/serialization/optional.hpp
关于c++ - 如何 boost::serialize std/boost::optional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26061956/