例如,我有一系列事件对象,其中事件是具有不同专门化(例如,HolidayEvent和SickDayEvent)的层次结构的基类。基类有一些字段(例如日期、雇员),每个专门化都添加了自己的一组字段(例如,HolidayEvent有holidayName,SickDayEvent有numDays)。
有什么方法可以很好地对多态数据元素(如HDF5中的多态数据元素)建模吗?我的意思是,显而易见的选择--创建一个包含所有字段的复合类型和一个类型判别--可能会浪费大量的存储空间,特别是当专门化中有许多不同原子类型的独特字段时,以及当专门化中的字段数量变化很大时,需要联合的大小与一个专门化中最大的字段数一样大。
发布于 2013-12-17 07:25:42
在Hdf5中,可以创建任意的复合类型。Hdf5不知道他们之间是否有联系。因此,我建议为层次结构中的每个类类型创建一个Hdf5类型。
看这里还有更多。
发布于 2013-12-20 16:40:35
这个要求太高级了,我认为HDF5不能直接支持这个函数。
我能想到的一种方法是使用2个HDF5数据集来描述逻辑多态类型的数据集。
首先,创建一个主数据集,它涵盖超类的所有字段,即示例中的事件。此外,该数据集还需要维护对另一个辅助数据集(即示例中的HolidayEvent/SickDavEvent )的引用,该数据集涵盖特定子类的所有扩展字段。因此,您需要创建与这里的类一样多的复合数据类型,但是对于每个子类的复合数据类型,只包括扩展字段。
我认为这是唯一的方法,如果您不想浪费任何额外的空间,但仍然使超类多态。正如前面提到的,由于不同子类的扩展字段需要不同的存储空间,因此在单个数据集中维护所有唯一字段的效率很低。
https://stackoverflow.com/questions/19798275
复制相似问题