c++ - 如何为 boost::serialization 指定 nvp 包装器?

标签 c++ boost boost-serialization

我正在尝试学习如何使用 boost::serialization 来记录对象。例如,我使用以下代码来序列化对象:

struct Abc
{
    int a;
    float b;
    double c;
};

namespace boost
{
    namespace serialization
    {
        template <typename Archive>
        void serialize(Archive& ar, Abc &obj,const unsigned int version)
        {
            ar & BOOST_SERIALIZATION_NVP(obj.a);
            ar & BOOST_SERIALIZATION_NVP(obj.b);
            ar & BOOST_SERIALIZATION_NVP(obj.c);
        };

    }
};

    Abc kkk;

    std::ofstream ofs(tmpFile);

    boost::archive::xml_oarchive ar(ofs);

    ar & kkk;
    ofs.close();

但是,当我编译代码时,出现以下编译错误:

Error   1   error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type'   \boost_1_50_0\boost\archive\basic_xml_oarchive.hpp 92

错误信息引出boost的源码:

 template<class T>
    void save_override(T & t, BOOST_PFTO int)
    {
        // If your program fails to compile here, its most likely due to
        // not specifying an nvp wrapper around the variable to
        // be serialized.
        BOOST_MPL_ASSERT((serialization::is_wrapper< T >));
        this->detail_common_oarchive::save_override(t, 0);
    }

有什么想法吗?谢谢。

最佳答案

您还需要在底部代码中将 Abckkk 实例设置为 NVP:

ar & BOOST_SERIALIZATION_NVP(kkk);

序列化为 XML 存档的所有内容都必须以这种方式构建,而不仅仅是子元素。

关于c++ - 如何为 boost::serialization 指定 nvp 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38158947/

相关文章:

c++ - 如何在 while 循环中使用 .erase()?

python - boost::python 参数类型不匹配

c++ - boost::archive::text_iarchive 构造函数异常

c++ - Boost.Asio socket::close 不抛出 boost::asio::error::operation_aborted 错误

c++ - 使用 Boost 序列化时如何删除此重复代码?

c++ - 用boost序列化一个有内嵌类的类,但是只序列化wrapper中的信息

c++ - 使用可变修改类型实例化模板

python - 如何终止在后端执行长时间运行的 C/C++ 代码的 python 解释器?

c++ - 即使使用适当的方面,非有限 float 的反序列化也会失败

c++ - 如何确定一个模板参数可以转换成算术类型?