c++ - 多个多态对象序列化/反序列化模式

标签 c++ design-patterns serialization base-class polymorphism

我需要序列化/反序列化一个多态层次结构,但我不太清楚格式。

按照我的设想,每个独特的对象类型都应该序列化自身,以“魔数(Magic Number)”开头以表示工厂稍后需要反序列化的类型。但是,反序列化应该由单独的类处理还是明确且完全由工厂处理?

我想如果反序列化由单独的类处理,它会更“优雅”和结构化,但考虑到大多数(如果不是全部)对象继承自其他对象并且数据必须用于初始化基类构造函数,我我有点不清楚继承类的成员方法如何能够实现这一点,因为基类初始化必须先于它。

另一种方法是将反序列化方法从各个类中分离出来,并将所有代码移至工厂,但这将使以与序列化完全相反的方式实现反序列化变得更加困难。这意味着我必须提取每个类的完整继承链所需的所有数据,将其放入堆栈并使用它来调用适当的构造函数。

对这个问题有什么想法吗?

最佳答案

序列化和反序列化应该尽可能对称。最好由具有反序列化函数(例如 operator>>())的类本身来完成,因此工厂会根据 ID 创建类,然后将流传递给反序列化函数。然后该函数可以调用基类的反序列化函数。

关于c++ - 多个多态对象序列化/反序列化模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093039/

相关文章:

c++ - 在 python 中公开 C++ 函数并在 C++ 中嵌入 python

android - Android 开发的架构模式

c# - C# 可以反序列化一个序列化的简单 java 对象吗?

json - Golang Chi 路由器不呈现响应负载 JSON

android - 传递 Serializable 时出现 ClassNotFoundException

c++ - Windows DLL实际上是如何共享的?

c++ - QT:私有(private)成员而不是继承?是什么原因?这是一个具体的概念吗?

c++ - A^T*A稀疏积,结果存储在Dense Matrix/Eigen Lib中

java - 如何设计不在/排除查询行为

oop - 何时将方法声明为私有(private)