gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:02:00 32 4
gpt4 key购买 nike

我正在尝试学习如何使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com