C++ Boost.Serialization - 用户定义成员的非侵入式序列化?
C++ Boost.Serialization - Non intrusive serialization of user-defined members?
我有一个 class 结构,如
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);
这可以编译并工作,但我觉得这不是这样做的方法,因为它为成员 class?
重用了容器 class 的版本号
那么如何处理呢?容器 class 必须单独管理其成员的版本吗?
答案是写作
template<class Archive>
void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
{
ar & c.other_members;
ar & c.special_member;
}
即使我们只有
的 non-intrusive 版本也能正常工作
void serialize(Archive & ar, MemberClass & m, const unsigned int version);
我不知道。
永远不要显式调用外部序列化函数。
我有一个 class 结构,如
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);
这可以编译并工作,但我觉得这不是这样做的方法,因为它为成员 class?
重用了容器 class 的版本号那么如何处理呢?容器 class 必须单独管理其成员的版本吗?
答案是写作
template<class Archive>
void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
{
ar & c.other_members;
ar & c.special_member;
}
即使我们只有
的 non-intrusive 版本也能正常工作void serialize(Archive & ar, MemberClass & m, const unsigned int version);
我不知道。
永远不要显式调用外部序列化函数。