如何从档案中检索true_type?

时间:2012-10-29 21:55:41

标签: c++ serialization boost polymorphism

上下文

我使用Boost序列化库来保存和加载系统的对象。 我定义了这个lib的实践,所以我总是从一个基类序列化(每个类可序列化继承自ISerializable)。 因此,true_type(即派生类型最多)与this_type(即ISerializable)不同,而true_type存储在档案中。

我的问题

如何仅从归档对象中检索此true_type(作为归档中的字符串)?

详细

让我们有这个类树:

ISerializable< | - B< | - D

如果我这样做:

B* b = new D();
b->SaveToFile(path); // <= this will do the serialization `ar & this`
                           (`this` being a `ISerializable*`)

我获得了一个存档,其中写有true_type“D”(无论存档的类型如何:txt,bin或xml)。

使用b对象和此代码:

const boost::serialization::extended_type_info & true_type
        = * boost::serialization::type_info_implementation<ISerializable>::type
            ::get_const_instance().get_derived_extended_type_info(*b);

我在true_type.get_key()中拥有我想要的东西,即:“D”。我可以验证在存储b的每个存档中都写入了“D”。我的问题是:如何只使用归档对象(从归档文件构造而没有错误),我可以检索此密钥吗?

1 个答案:

答案 0 :(得分:1)

它应该是这样的:

B * b;
ar >> b;//loading archive
const boost::serialization::extended_type_info & true_type
    = * boost::serialization::type_info_implementation<ISerializable>::type
        ::get_const_instance().get_derived_extended_type_info(*b);

因为保存的类型是D,所以loadad类型也是D.