【问题标题】:Creating a serializable superclass创建一个可序列化的超类
【发布时间】: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


【解决方案1】:

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

此外,您的问题不是很清楚,请显示更多“真实”代码。

我实际上没有得到问题,你想让一个静态方法获取一个静态,如果你想将它添加到一个对象,你显然需要创建它:o

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多