在我的项目中,我需要能够将对象序列化为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
无法覆盖它。
这里的清洁解决方案是什么?我错过了一些非常明显的东西吗?
答案 0 :(得分:0)
如果没有注释中提到的默认构造函数,则无法反序列化对象。
此外,您的问题并非真正明确,请显示更多"真实"代码。
我实际上没有遇到问题,你想要一个静态的方法取一个静态,如果你想把它贴在一个你明显需要创建它的对象上:o