Не могу решить проблему с ошибкой компиляции в 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;