【问题标题】:Multiple polymorphic objects serialization/deserialization pattern多态对象序列化/反序列化模式
【发布时间】:2013-12-04 06:35:07
【问题描述】:

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

按照我的理解,每个唯一的对象类型都应该自行序列化,以“幻数”开头,表示工厂稍后需要反序列化的类型。但是,反序列化应该由单个类处理还是显式地完全由工厂处理?

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2011-05-03
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2020-03-30
      相关资源
      最近更新 更多