Как указать, давая общий параметр, что он должен реализовывать какой-то конкретный метод создания? - PullRequest
0 голосов
/ 15 октября 2019

Как указать, давая универсальный параметр, что он должен реализовывать какой-то конкретный метод создания? поскольку LIST[G -> create make end] не работает: - (

class diagram

В моем конкретном случае * SMA_INVERTER_MANAGER_CSV унаследовал от CONSUMPTION_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

Надеюсь, описание достаточно для понимания, рефакторинг, я думаю, этот вопрос связан -> явный тип создания, не соответствующий типу цели

Единственный обходной путь на данный момент, который я нашел работающим на данный момент, это

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 Ответ

1 голос
/ 15 октября 2019

Существует больше, чем проблема соответствия. MEASURING_POINT_MODBUS_DEVICE отсрочено. Поэтому его нельзя использовать в качестве фактического параметра для CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV. Если бы это было разрешено, как бы CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV могло создать экземпляр отложенного класса?

В вопросе упоминается одно из возможных решений - предоставление эффективного класса. Другое решение состоит в том, чтобы добавить формальный универсальный параметр к SMA_INVERTER_MANAGER_CSV с соответствующим ограничением и использовать его для фактического универсального параметра CONSUMPTION_SECTOR_MODBUS_DEVICE_CSV.

...