2012-10-24 57 views
1

In this link您可以找到提升序列化和反序列化。但是在反序列化方法中,我们需要给该类的特定对象进行反序列化。例:newg将动态类型的反序列化提升为动态类型

gps_position newg; 
{ 
    // create and open an archive for input 
    std::ifstream ifs("filename"); 
    boost::archive::text_iarchive ia(ifs); 
    // read class state from archive 
    ia >> newg; 
    // archive and stream closed when destructors are called 
} 

由于C++不必须任何基类像在C#对象,我怎样才能反序列化到一个共同的对象,然后强制转换呢?

至于我没有,我可以创建自定义类调用对象,并继承所有其它类,但即使在这种情况下,会出现反序列化2倍的情况。有没有解决这个问题的方法?

回答

2

Boost.serialization必须被赋予具体的类。由于C++没有虚拟构造函数,因此反序列化器必须知道要创建什么对象。共同的祖先也无济于事。对象必须在反序列化之前创建

如果要序列化和反序列化类层次结构,则必须在序列化对象和反序列化时显式编写类Id - 显式读取此Id以作出决定 - 要创建和反序列化的对象。

+0

但即使读取ID我必须第一反序列化,然后心不是它再次反序列化到该类型? – Navin

+0

我不认为提升序列化被设计用于动态对象层次结构。也许我不对。 – Lazin

+0

谢谢男人..我期待它.. – Navin

0

,如果你序列化/反序列化对象的指针可以反序列化到一个基类。自动创建Id等。的机构进行说明here