如何在给出通用参数时指定应实现某些特定创建方法的方法?

时间:2019-10-15 10:15:48

标签: generic-collections eiffel

在提供通用参数时应如何指定应实现某些特定的创建方法?因为LIST[G -> create make end]不起作用:-(

class diagram

在我的特定情况下,   * SMA_INVERTER_MANAGER_CSVCONSUMPTION_SECTOR_MODBUS_DEVICE_CSV继承了devices: LINKED_SET[G]G -> MEASURING_POINT_MODBUS_DEVICE create make_from_file_path end的设备列表。

我希望SMA_INVERTER_MANAGER_CSV类能够加入devices: LINKED_SET[G],使其能够拥有JANITZA_DEVICE,SUNSPEC_DEVICE,ABB_DEVICE等。将通用参数指定为MEASURING_POINT_MODBUS_DEVICE似乎是有道理的,但是如何指定我希望创建方法为make_from_file_path

希望描述足以理解,重构,我认为这个问题是联系在一起的-> explicit creation type not conforming to type of target

我目前发现唯一可行的解​​决方法是

class
    SMA_INVERTER_MANAGER_CSV

inherit
    CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV[SUNSPEC_DEVICE]

create
    make


end

但我希望成为

class
    SMA_INVERTER_MANAGER_CSV

inherit
    CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV[MEASURING_POINT_MODBUS_DEVICE]

create
    make


end

由于MEASURING_POINT_MODBUS_DEVICE通用参数未将make_from_file_path指定为创建过程,因此会产生一致性问题

1 个答案:

答案 0 :(得分:1)

不仅存在一致性问题。 MEASURING_POINT_MODBUS_DEVICE被推迟。因此,它不能用作CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV的实际参数。如果允许,CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV将如何创建一个延迟类的实例?

问题中提到了一种可能的解决方案-提供有效的课程。另一种解决方案是向具有约束条件的SMA_INVERTER_MANAGER_CSV添加一个正式的泛型参数,并将其用于CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV的实际泛型。