C++ C++;通过基类指针提升子类的序列化
我通过指向其基类的指针来执行子类对象的序列化/反序列化。一切正常,但我错过了一个功能:向反序列化对象的构造函数添加运行时参数,例如:C++ C++;通过基类指针提升子类的序列化,c++,serialization,boost,deserialization,boost-serialization,C++,Serialization,Boost,Deserialization,Boost Serialization,我通过指向其基类的指针来执行子类对象的序列化/反序列化。一切正常,但我错过了一个功能:向反序列化对象的构造函数添加运行时参数,例如: class Base { public: Base(AnotherClass* another) :m_another(another) {} protected: AnotherClass* m_another; }; class Derived : public Base { publ
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);
...
我创建派生对象的常规方法是:
Base* obj = new Derived(anotherObj);
反序列化过程如下所示:
Base* obj;
ar >> obj;
将调用默认构造函数(派生()),并进行反序列化,但m_另一个未反序列化,应将其传递给构造函数,所有其他字段均反序列化。此外,我不能在反序列化之后设置另一个m_,因为它实际上会影响反序列化。
我可以通过一个全局变量传递对另一个对象的引用-丑陋,但有效。
有没有办法以一种不那么丑陋的方式来解决这个问题呢?首先,要获得类的多态行为,你需要一个。这一逻辑要求是: 结果表明,序列化对象的类型取决于基类(在本例中为基类)是否为polymophic。若base不是多态的,也就是说,若它并没有虚函数,那个么base类型的对象将被序列化。任何派生类中的信息都将丢失。如果这是所需的(通常不是),则无需其他努力 如果基类是多态的,则派生类型最多的对象(在本例中为派生类型1或派生类型2)将被序列化。要序列化哪种类型的对象的问题(几乎)由库自动处理 [……] 实现这一点的明显方法是使用虚拟析构函数()
接下来,要使用非默认构造函数(反)序列化类型,请使用
保存构造数据
/加载构造数据
。同样,这是一个好的开始。这个类是多态的,谢谢!问题是load_construct_data()反序列化传递给构造函数的参数,而我需要runtime param.Huh。那么,您是否明确希望注入存档中不存在的数据?为什么在save\u-construct\u-data
中序列化m\u-other
会有问题?使用别名检测的对象跟踪将自动完成其余工作。我建议创建一个自包含的示例,展示您所拥有的以及希望发生的情况。这是一个问题,因为(在我的例子中)m_other是指向包含反序列化对象的对象的指针。所以(在我的例子中)m_-other在前面被反序列化,我所需要的就是将指针传递给m_-other.So?我已经回答了。你是想让我相信,不,你的问题很难解决还是无法解决?你运气不好,因为这个网站是关于分享解决方案的,而不仅仅是问题。展示你所拥有的将会有所帮助。所以,在并没有这些的情况下,让我来举一些可能对你们有帮助的例子:。这会稍微麻烦一些。