【发布时间】:2012-11-07 00:20:17
【问题描述】:
我是第一次看 Boost.Serialization,我找不到关于虚拟菱形继承结构序列化的明确评估(或说明)。
考虑以下类层次结构:
class A { int a; }
class B1 : public virtual A { int b1; }
class B2 : public virtual A { int b2; }
class B3 : public virtual A { int b3; }
class C12 : public virtual B1, public virtual B2 { int c12; }
class C13 : public virtual B1, public virtual B3 { int c13; }
class C23 : public virtual B2, public virtual B3 { int c23; }
class D123 : public virtual C12, public virtual C13, public virtual C23 { int d123; }
使用 Boost.Serialization 在所有这些类中实现序列化的正确(希望是简单)方法是什么?
注意:没有需要序列化的指针或引用类成员。另请注意:我很高兴使用dynamic_cast<> 来确保对该层次结构中任何类的任何指针或引用都是所需的、派生最多的类型:我只关心如何正确、干净地保证所有 BASE -class 数据成员与被序列化的当前类一起正确序列化和反序列化。
【问题讨论】:
-
如果你使用的是虚拟方法,你可能在使用序列化时会遇到一些麻烦,因为它是一个模板类:stackoverflow.com/questions/10490245/…
-
@Ben 我相信链接问题中的问题仅与 abstract 基类(即具有 pure 虚函数的基类)有关,因为这样的类不能被实例化,因此不可能在这样的类中实例化所需的
serialize()函数。我不相信虚函数会影响 Boost.Serialization - 事实上,它是特定的数据,并且只有数据,是序列化的,所以我认为虚函数的存在本质上与 Boost.Serialization 无关,除非是间接的,如链接中的示例所示。 -
@Ben 以下链接似乎提供了一种将 Boost.Serialization 与抽象基类一起使用的受良好支持的方法:stackoverflow.com/questions/1332602/…
标签: c++ serialization boost