Ich habe Probleme Generika zu bekommen in dem folgenden Szenario zu arbeiten:Schnittstellen und Generics
Delphi stellt die Schnittstelle IComparable:
IComparable <T> = interface
function CompareTo (Value : T) : Integer;
end;
ich hinzufügen, eine andere Schnittstelle IPersistent:
IPersistent = interface
function ToString : String;
procedure FromString (const Str : String);
end;
One Beispiel einer Klasse, die beide Schnittstellen implementiert:
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;
nun für eine andere generische Klasse, die zwei Schnittstellen Einschränkungen hat:
ISortIndex <VALUE_TYPE : IPersistent, IComparable> = interface
...
end;
Und schließlich eine Implementierung dieser Schnittstelle: Jetzt
TSimpleSortIndex <VALUE_TYPE : IPersistent, IComparable> = class (TInterfacedObject, ISortIndex <VALUE_TYPE>)
...
end;
wenn ich versuche, eine Art Index wie das zu erklären:
FSortIndex : ISortIndex <TComparableString>;
Ich bekomme eine Fehlermeldung
[DCC Error] Database.pas(172): E2514 Type parameter 'VALUE_TYPE' must support interface 'IComparable'
Ich habe mehrere Dinge ausprobiert, aber ich kann es nicht zum Laufen bringen.
Wer hat Hilfe? Vielen Dank!
Ich habe das versucht. Dies führt zu folgendem Fehler: "E2514 Type Parameter 'VALUE_TYPE' muss Schnittstelle 'IComparable' unterstützen." –
jpfollenius
Ah, ich verstehe warum. Bearbeiten ... –
Ich wollte eigentlich TComparableString anstelle von String verwenden. Alles scheint jetzt gut zu funktionieren. Danke für die schnelle und präzise Hilfe! – jpfollenius