繁体   English   中英

如何在给出一个泛型参数时指定它应该实现一些特定的创建方法?

[英]How to specify when giving a generic parameter that it should implement some specific creation method?

如何在给出一个泛型参数时指定它应该实现一些特定的创建方法? 因为LIST[G -> create make end]不起作用:-(

类图

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

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

希望描述足以理解,重构我认为这个问题是链接-> 显式创建类型不符合目标类型

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

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指定为延迟的创建过程

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM