Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每次执行继承时是否都需要boost::serialization::base_对象?_C++_Boost_Boost Serialization - Fatal编程技术网

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);
     }