我有一系列的,例如 Event 对象,其中 Event 是具有不同特化的层次结构的基类(例如, HolidayEvent 和 SickDayEvent )。基类有一些字段(例如 date , employee ),每个特化都添加了自己的字段集(例如 HolidayEvent 会有 holidayName 和 SickDayEvent 将有 numDays )。
有没有办法以漂亮的方式在HDF5中对这些多态数据元素进行建模?通过 nice 我的意思是显而易见的替代方案 - 使用所有字段的 union 和类型判别式创建复合类型 - 可能会浪费很多存储空间,特别是当专业化具有许多不同原子类型的唯一字段时,并且当专业化中的字段数变化很大时,要求联合与专业化中最大数量的字段一样大。
答案 0 :(得分:0)
在Hdf5中,您可以创建任意复合类型。 Hdf5不知道他们是否彼此有关系。所以我建议为层次结构中的每个类类型创建一个Hdf5类型。
答案 1 :(得分:0)
这个要求太高级了,我认为HDF5不能直接支持这个功能。
我能想到的一种方法是使用2个HDF5数据集来描述逻辑多态类型数据集。
首先,创建一个主数据集,它涵盖超类的所有字段,即示例中的事件。此外,此数据集还需要将引用维护到另一个辅助数据集,即示例中的HolidayEvent / SickDavEvent,它涵盖特定子类的所有扩展字段。因此,您需要创建与此处具有的类一样多的复合数据类型,但是对于每个子类的复合数据类型,只包含扩展字段。
我认为这是唯一的方法,如果你不想浪费任何额外的空间,但仍然使超类多态。因为不同子类的扩展字段需要不同的存储空间,如您所述,在单个数据集中维护所有唯一字段的效率非常低。