未注册Boost :: serialization和base / derived关系

时间:2016-05-31 11:04:27

标签: boost-serialization

我有两种类型的多态类型:

class Base1 {...};
class Base2 {...};
class Derived1 : public Base1 {...};
class Derived : public Derived1, public Base2 {};

我用

BOOST_CLASS_EXPORT_KEY(Derived)
用于派生的序列化头文件中的

。和

BOOST_CLASS_EXPORT_IMPLEMENT(Derived)

用于实现Derived的序列化自由函数的翻译单元,它简单地为两个碱基调用base_object。我为None of Base1,Base2,Derived1做了这个。 我只实例化了boost :: mpi所需的归档的序列化函数。 所有这些都在一个链接的共享对象中,以生成可执行文件。

使用Base1 *指针时保存到存档失败。

调试时,我在

中看到
boost/archive/detail/oserializer.hpp

在第393行附近,派生类型已正确注册,但稍后会在411处抛出异常

"the base/derived relationship hasn't be registered"

,异常显示类型

Derived 

Base1

如何注册关系本身?

1 个答案:

答案 0 :(得分:0)

道歉,我实际上错过了在Derived1的序列化实现中调用base_object。

现在它就像一个魅力,