【发布时间】:2018-12-13 02:03:03
【问题描述】:
我通过指向其基类的指针来执行子类对象的序列化/反序列化。一切正常,但我错过了一个功能:向正在反序列化的对象的构造函数添加运行时参数,例如:
class Base {
public:
Base(AnotherClass* another)
:m_another(another)
{}
protected:
AnotherClass* m_another;
};
class Derived : public Base {
public:
Derived(AnotherClass* another)
:Base(another)
{}
Derived()
:Base(nullptr)
{}
private:
/* different other members */
};
BOOST_CLASS_EXPORT(Derived);
...
我创建 Derived 对象的常规方法是:
Base* obj = new Derived(anotherObj);
反序列化是这样的:
Base* obj;
ar >> obj;
将调用默认构造函数(Derived()),并进行反序列化,但是 m_another 没有反序列化,它应该传递给构造函数,所有其他字段都被反序列化。
此外,我不能在反序列化后设置 m_another,因为它实际上会影响反序列化。
我可以通过全局变量传递对 anotherObj 的引用 - 丑陋,但有效。
有什么办法可以不那么丑陋的方式解决吗?
【问题讨论】:
标签: c++ serialization boost deserialization boost-serialization