正在创建可序列化的超类
Creating a serializable superclass
在我的项目中,我需要能够将对象序列化为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
相关文章:
- 我可以通过将类强制转换为 char* 来序列化类吗?
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- 通过 tcp 发送 C# 类并在 C++ 上反序列化
- 对模板化类链使用可变参数模板来生成序列化
- boost::序列化中的派生类偏移量计算.有效吗?
- C++ 提升 - 包含类层次结构对象的类的序列化
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 增强序列化,按基类型加载存档类会产生错误的数据
- 使用 Boost::Serialization 序列化具有 std::mt19937_64 成员的类
- C++通过基类指针提升子类的序列化
- 从模板化类版本控制序列化派生类
- 使用提升序列化多态类
- 类序列化方法
- 事件类序列化
- 正在创建可序列化的超类
- 用自己的类序列化QHash
- 在Boost (c++)中没有类跟踪的派生类序列化
- 增强类序列化,更改成员类型
- 用户定义的类序列化、C++和msgpack