У меня проблемы с получением дженериков для работы в следующем сценарии:
Delphi предоставляет интерфейс IComparable:
IComparable <T> = interface
function CompareTo (Value : T) : Integer;
end;
Я добавляю еще один интерфейс IPersistent:
IPersistent = interface
function ToString : String;
procedure FromString (const Str : String);
end;
Один пример класса, реализующего оба интерфейса:
TComparableString = class (TInterfacedObject, IComparable <String>, IPersistent)
strict private
FValue : String;
public
function CompareTo (Value : String) : Integer;
function ToString : String;
procedure FromString (const Str : String);
end;
Теперь для другого универсального класса, который имеет два ограничения интерфейса:
ISortIndex <VALUE_TYPE : IPersistent, IComparable> = interface
...
end;
И, наконец, одна реализация этого интерфейса:
TSimpleSortIndex <VALUE_TYPE : IPersistent, IComparable> = class (TInterfacedObject, ISortIndex <VALUE_TYPE>)
...
end;
Теперь, когда я пытаюсь объявить индекс сортировки следующим образом:
FSortIndex : ISortIndex <TComparableString>;
Я получаю сообщение об ошибке
[DCC Error] Database.pas(172): E2514 Type parameter 'VALUE_TYPE' must support interface 'IComparable'
Я попробовал несколько вещей, но не могу заставить его работать.
Кто-нибудь нуждается в помощи? Спасибо!