每次做继承都需要boost::serialization::base_object吗?
Is boost::serialization::base_object required every time I do inheritance?
我有:
非多态(无虚拟方法)class 层次结构;
base class 已经包含serialize
;
child classes直接序列化;
class A
{
private:
int x;
int y;
template<typename Archive>
void serialize(Archive& ar, const unsigned int)
{
ar & x & y;
}
};
class B : public A { /* no data members*/ };
class C : public A { /* no data members*/ };
classB
和 C
中是否需要 serialize
函数?
serialize
B
和 C
中的函数就是这样的:
template<typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::base_object<A>(*this);
}
我应该期待文档中有关于此的注释吗?
没有。如果不想从base序列化数据,可能不需要。
但是,在多态层次结构中,如果只是为了告诉存档有关已注册的类型,您确实需要它。
见https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html
这里有很多例子:
我有:
非多态(无虚拟方法)class 层次结构;
base class 已经包含
serialize
;child classes直接序列化;
class A { private: int x; int y; template<typename Archive> void serialize(Archive& ar, const unsigned int) { ar & x & y; } }; class B : public A { /* no data members*/ }; class C : public A { /* no data members*/ };
class
B
和C
中是否需要serialize
函数?serialize
B
和C
中的函数就是这样的:template<typename Archive> void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::base_object<A>(*this); }
我应该期待文档中有关于此的注释吗?
没有。如果不想从base序列化数据,可能不需要。
但是,在多态层次结构中,如果只是为了告诉存档有关已注册的类型,您确实需要它。
见https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html
这里有很多例子: