将反序列化提升为动态类型

时间:2012-10-24 05:47:49

标签: c++ boost deserialization boost-serialization

In this link你可以找到boost序列化和反序列化。但是在反序列化方法中,我们需要给类的特定对象反序列化。例如: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#中没有像Object这样的基类,我如何反序列化为一个公共对象然后进行类型化?

就我而言,我可以创建一个自定义类调用对象并从中继承所有其他类,但即使在这种情况下,也会出现反序列化2次的情况。这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果序列化/反序列化指向对象的指针,则可以反序列化为基类。然后Boost会自动创建Id等。该机制描述为here