创建可序列化的超类

时间:2014-10-14 13:21:26

标签: c++ serialization polymorphism

在我的项目中,我需要能够将对象序列化为XML文件(我使用TinyXML)。 我想创建一个XMLSerializable超类,任何需要序列化的类都可以从中继承。

我正在努力想出一种干净的方式来执行反序列化步骤(从文件加载对象)。对于XMLSerializable::serialize,签名对我来说似乎很清楚:

virtual tinyxml2::XMLElement* serialize() = 0;    

我可以用类似的方式实现deserialize

virtual bool deserialize(const char* filename) = 0; // returns true on success

然而,这迫使我在调用deserialize之前首先实例化任何继承的类,如下所示:

ConcreteClass instance;
instance.deserialize("settings.xml");

这很麻烦,尤其是ConcreteClass没有默认构造函数的情况。 我无法将deserialize设为静态,因为ConcreteClass无法覆盖它。

这里的清洁解决方案是什么?我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:0)

如果没有注释中提到的默认构造函数,则无法反序列化对象。

此外,您的问题并非真正明确,请显示更多"真实"代码。

我实际上没有遇到问题,你想要一个静态的方法取一个静态,如果你想把它贴在一个你明显需要创建它的对象上:o