用抽象类提升二进制序列化问题

时间:2011-06-30 15:29:23

标签: c++ serialization boost input abstract

Ciao人,

我很安静,不想找到问题的根源。我正在使用Boost:序列化(版本1.46.1),一切都与binary_oarchive一起正常工作。我有一个类的层次结构,因此,我使用register_type()

但是,在我使用binary_iarchive来反序列化我的对象时,我得到了

  

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

来自输入档案中register_type()的调用。

在谷歌搜索后,我发现宏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

1 个答案:

答案 0 :(得分:1)

  

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

似乎代码中的某个地方,您正在创建抽象类的实例。这就是您收到此错误的原因,因为禁止创建 abstract 类的实例。您只能创建具体类的实例。

你需要通过写:

来告诉提升X是一个抽象类
BOOST_SERIALIZATION_ASSUME_ABSTRACT(X);

现在请按照此主题进一步解释: