正在创建可序列化的超类

Creating a serializable superclass

本文关键字:超类 序列化 创建      更新时间:2023-10-16

在我的项目中,我需要能够将对象序列化为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覆盖。

这里的清洁溶液是什么?我是不是错过了一些显而易见的东西?

如果没有注释中提到的默认构造函数,就不可能反序列化对象。

如果您的问题不是很清楚,请显示更多"真实"代码。

我实际上不明白这个问题,你想让一个静态方法接受一个静态,如果你想把它附加到一个对象上,你显然需要创建它:o