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次的情况。这个问题有解决方法吗?
答案 0 :(得分:2)
必须为具体类提供Boost.serialization。由于c ++没有虚拟构造函数,因此反序列化器必须知道要创建的对象。共同的祖先也无济于事。必须在 反序列化之前创建对象。
如果要序列化和反序列化类层次结构,则必须在序列化对象时以及反序列化时显式编写类ID - 显式读取此Id以做出决定 - 要创建和反序列化的对象。
答案 1 :(得分:0)
如果序列化/反序列化指向对象的指针,则可以反序列化为基类。然后Boost会自动创建Id等。该机制描述为here