我使用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”。我的问题是:如何只使用归档对象(从归档文件构造而没有错误),我可以检索此密钥吗?
答案 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.