c++ - 如何 boost::serialize std/boost::optional?

标签 c++ c++11 serialization boost option-type

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

相关文章:

c++ - 从单个定义创建字符串和宽字符串文字

c++ - 模板友元函数无法访问私有(private)成员

c++ - 使用 Clang、libc++ 和 c++11 制作 SFML2 应用程序。对 SFML 库的 undefined reference

c++ - rand() 函数的动态链接器错误

c++ - 具有段错误的函数模板

haskell - Websockets 上 GHCJS 代码最有效的有线格式

iphone - 使用 NSCoding 在 App 中序列化的数据是否安全?

c++ - 在 C++ 中将数字四舍五入到小数点后两位

c++ - 将手写循环转换为标准库调用

ruby - 相当于 ActiveRecord 的 `serialize` 方法的 Mongoid