【发布时间】:2023-03-16 23:21:01
【问题描述】:
在我的项目中,我需要能够将对象序列化为 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 覆盖。
这里的清洁解决方案是什么?我是否遗漏了一些非常明显的东西?
【问题讨论】:
-
AFAIK,如果没有默认构造函数,您无法真正反序列化对象。
标签: c++ serialization polymorphism