如何提升::序列化std / boost :: optional?

时间:2014-09-26 14:27:16

标签: c++ c++11 serialization boost optional

如何序列化包含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;
}

我理解可能存在更深层次的问题(当值不存在时,您应该写什么文件?),但必须有一些标准的解决方案。我正在寻找解决这个问题的最简单方法。

1 个答案:

答案 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

相关问题