抽象类的Boost二进制序列化问题

Boost binary serialization problem with abstract class

本文关键字:序列化 问题 二进制 Boost 抽象类      更新时间:2023-10-16

Ciao伙计们,

我非常不想找到问题的根源。我使用Boost:serialization(版本1.46.1),binary_oarchive的一切都很好。我有一个类的层次结构,因此,我使用register_type()

然而,当我开始使用binary_iarchive来取消对对象的序列化时,我得到了

错误:无法分配抽象类型的对象

它来自于CCD_ 4对输入档案的调用。

在谷歌上搜索后,我发现宏BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)必须用于抽象类。问题是它根本不起作用:)。有人能帮我吗?

更多关于我的代码:

virtual void AbstractClass::initBinarySerialization(binary_iarchive& ia)
        {
            ia.register_type<AbstractClass>();
        }
virtual void SubClass::initBinarySerialization(binary_iarchive& ia)
        {
            AbstractClass::initBinarySerialization(ia);
            ia.register_type<SubClass>();
        }

在阅读档案之前,我打电话给initBinarySerialization

错误:无法分配抽象类型的对象

似乎在代码中的某个地方,您正在创建抽象类的实例。这就是为什么会出现这个错误,因为创建抽象类的实例是被禁止的。您只能创建具体类的实例。

您需要告诉boost X是一个抽象类,方法是:

BOOST_SERIALIZATION_ASSUME_ABSTRACT(X);

现在按照这个主题进一步解释:

  • 如何使用Boost.serialize序列化派生模板类