如何为 boost::serialization 指定一个 nvp 包装器?
Posted
技术标签:
【中文标题】如何为 boost::serialization 指定一个 nvp 包装器?【英文标题】:How to specify an nvp wrapper for boost::serialization? 【发布时间】:2016-07-02 10:09:13 【问题描述】:我正在尝试学习如何使用 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);
有什么想法吗?谢谢。
【问题讨论】:
【参考方案1】:您还需要在底部的代码中将 kkk
的 Abc
实例设为 NVP:
ar & BOOST_SERIALIZATION_NVP(kkk);
所有被序列化为 XML 存档的东西都必须以这种方式构造,而不仅仅是子元素。
【讨论】:
以上是关于如何为 boost::serialization 指定一个 nvp 包装器?的主要内容,如果未能解决你的问题,请参考以下文章
我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?