C++ 每次执行继承时是否都需要boost::serialization::base_对象?
我有:C++ 每次执行继承时是否都需要boost::serialization::base_对象?,c++,boost,boost-serialization,C++,Boost,Boost Serialization,我有: 非多态(无虚拟方法)类层次结构 基类已包含序列化 子类直接序列化 class A { private: int x; int y; template<typename Archive> void serialize(Archive& ar, const unsigned int) { ar & x & y; } }; class B
- 非多态(无虚拟方法)类层次结构
- 基类已包含序列化
- 子类直接序列化
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*/ };
- 我应该在文档中看到一些关于这方面的注释吗
不需要。如果不想从基序列化数据,则可能不需要它 但是,在多态层次结构中,如果只是为了告诉存档有关已注册类型的信息,您确实需要它 看
这里有很多例子:谢谢你的回答和链接,看起来比我想象的要复杂。请允许我澄清我的问题,以确认我正确理解了示例。我查看了您提供的示例,它们似乎并没有真正触及我的案例。因此,问题得到了更新。你能再看一下吗?不,这不需要基类序列化。(这说明了为什么总是需要一个带有代码的清晰答案。在我的答案中,我假设你有一个基类/没有/有趣的成员,派生类拥有一切,但是,是的,反过来也是如此)。这是一个有趣的事情。我认为像“你不需要这个”这样的说法会导致更多的问题。此外,库并没有真正说明您需要它:它只是告诉您如何序列化(确保它有一个
serialize
成员或一个通过ADL可访问和可见的无同上的函数)对,我正是这么想的。e、 g如果我有免费的serialize
接受基类引用,它应该可以正常工作,就像在任何其他情况下一样,例如重写运算符这就是文档中所说的。在我看来,这是误导性的,因为这只适用于多态(虚拟方法)类层次结构。
template<typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::base_object<A>(*this);
}