СПРОСИ ПРОФИ
👍
0
👎 00

Почему не компилируется дженерик интерфейс в дженерик классе (Delphi)?

Не могу решить проблему с ошибкой компиляции в Delphi.

В коде у меня дженерик класс TMySpecialArray который умеет хранить и сравнивать значения любого типа. Для того что бы он мог сразвнивать значения любого типа класс имеет дженерик параметр CmpT: IComparer.
Когда я использую мой класс просто в коде то все работает нормально.
Если я использую этот мой класс из другого дженерик класса (см. TMySpecialArrayTest в коде ниже) я получаю ошибку коммпиляции.
«[dcc64 Error] Unit1.pas(45): E2514 Type parameter 'CmpT' must support interface 'System.Generics.Defaults.IComparer'»

Помогите понять почему TMySpecialArray не работает если использован и другого дженерик класса.
Использую Delphi 12.3.

type
TMySpecialArray<T:constructor; CmpT: IComparer<T>> = class
private
FComparer: CmpT;
end;

TMyComparer<TT> = class(TInterfacedObject, IComparer<TT>)
public
function Compare(const Left, Right: TT): Integer;
end;


TMySpecialArrayTest<V: constructor> = class
public
Arr: TMySpecialArray<V, TMyComparer<V> >; //!!! здесь ошибка компиляции
end;

var
var1: TMySpecialArray<Integer, TMyComparer<Integer>>;
var2: TMySpecialArray<TObject, TMyComparer<TObject>>;
var3: TMySpecialArray<string, TMyComparer<string>>;
var4: TMySpecialArrayTest<Integer>;
begin
var4 := TMySpecialArrayTest<Integer>.Create;
end;

разработка на Delphi программисты IT     #1   20 май 2025 11:26   Увидели: 77 клиентов, 1 специалист   Ответить

Задайте свой вопрос программистам –
профессионалам

Сейчас онлайн 75 программистов
Получите ответ профи быстро и бесплатно
ASK.PROFI.RU © 2020-2026