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

时间:2013-11-20 10:15:13

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

我需要序列化/反序列化多态层次结构,但我对格式有点不清楚。

我认为,每种独特的对象类型都应该自行序列化,从“幻数”开始,表示工厂后来需要反序列化的类型。但是,反序列化应该由各个类处理还是由工厂明确地完全处理?

我想,如果反序列化由各个类处理的,这将是更“优雅”和结构化的,但考虑到大多数,如果不是所有的对象与其它对象继承并且该数据必须被用于初始化的基类构造函数,我我有点不清楚继承类的成员方法如何能够实现这一点,因为基类初始化必须在它之前。

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

关于这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

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