2

在此链接中,您可以找到 boost 序列化和反序列化。但是在反序列化方法中我们需要给类的具体对象进行反序列化。例如:新格

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 次的情况。有没有解决这个问题的方法?

4

2 回答 2

3

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

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

于 2012-10-24T05:58:41.143 回答
0

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

于 2013-08-06T12:50:55.430 回答