Класс наследует два разных производных от одного и того же класса.

Каков правильный способ уточнения типа итерации через наследование.

поскольку наследование FOO [например, babar] не разрешено

ФОО

class FOO

inherit
    ITERABLE[detachable ANY] -- I know garbage but for DB_RESULT its the case


feature -- Access

    new_cursor: ITERATION_CURSOR[like items.item]
        do
            Result := items.new_cursor
        end

    items: ARRAY[detachable ANY]


end -- class FOO

БАР

class BAR

inherit
    FOO -- I know garbage but for DB_RESULT its the case

    ITERABLE[STRING] -- I know garbage but for DB_RESULT its the case


feature -- Access

    new_cursor: ITERATION_CURSOR[like items.item]
        do
            Result := items.new_cursor
        end

    items: ARRAY[STRING]


end -- class FOO

введите здесь описание изображения


person Pipo    schedule 12.06.2020    source источник


Ответы (1)


Я бы предложил использовать формальный общий параметр в классе FOO:

class FOO [G]
inherit
    ITERABLE [G]

Затем класс BAR предоставит подходящий фактический общий параметр:

class BAR
inherit
    FOO [STRING]
person Alexander Kogtenkov    schedule 12.06.2020
comment
Я тоже думал об этом решении, но не хочу давать для каждого l_foo: FOO[detachable ANY], но, возможно, единственный способ - «FOO_GENERIC_ANY наследовать FOO[detachable ANY]» :( - person Pipo; 12.06.2020
comment
@Pipo Насколько мне известно, привязанные типы не будут поддерживаться в родительских предложениях в ближайшее время, поэтому на данный момент я не вижу лучшего решения. - person Alexander Kogtenkov; 12.06.2020