C++ Boost.Serialization - 用户定义成员的非侵入式序列化

C++ Boost.Serialization - Non intrusive serialization of user-defined members?

本文关键字:序列化 成员 Serialization Boost 用户 定义 C++      更新时间:2023-10-16

我有一个类结构,如下所示

class MemberClass;
class ContainerClass {
  MemberClass special_member;
  int other_members;
};

按照 http://www.boost.org/doc/libs/1_66_0/libs/serialization/doc/中的示例进行操作我想编写一个非侵入式序列化:

template<class Archive>
void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
{
    ar & c.other_members; // easy - built-in type
    serialize(ar, c.special_member, version);  //???
}

假设他们的也是非侵入性的

void serialize(Archive & ar, MemberClass & m, const unsigned int version);

这可以编译和工作,但我觉得这不是这样做的方法,因为它重用了成员类的容器类的版本号?

那么如何处理呢?容器类是否必须单独管理其成员的版本?

答案是写作

template<class Archive>
void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
{
    ar & c.other_members;
    ar & c.special_member;
}

即使我们只有非侵入式版本的

void serialize(Archive & ar, MemberClass & m, const unsigned int version);

我不知道这一点。

切勿显式调用外部序列化函数。