Generische Container hin oder her, Sortierer hin oder her:
Dein TPositionComparer leitet sich von TInterfacedObject ab und realisiert ein oder mehrere Interfaces. Solche Instanzen referenzierst du entweder weiterhin über die Klasse, so wie du es mit var TCo: TPositionComparer;
getan hast. Oder du verwendest nur Interface-Variablen wie bspw. var myComparer: IComparer<TPosition>)
. Dann freust du dich dass es sich nun wie mit Records, Strings oder Arrays verhält: Du machst dir keine Sorgen mehr über die Freigabe und es passiert automatisch.
Aha...TPositionComparer -> Sowohl .Create als auch .Free aufrufen.
IComparer<TPosition>, alles geht von selbst.
Ist das wirklich so simpel ?
Wie sieht das dann in meinem Falle aus ?:
Delphi-Quellcode:
var
TCo: IComparer<TPosition>;
begin
FPositions.Sort(TCo);
end;
kann es kaum sein. Woher soll Sort denn wissen, das
mein Comparer aufgerufen wird ?
Es gibt auch ein
TComparer<T>.Construct
Einfach mal in die Doku schauen
Die Doku ist, ebenso wie bei .Sort, einfach nur sensationell unverständlich, wenn man mit Interfaces ein wenig auf Kriegsfuß steht. Außerdem muß da auch noch ein ominöser THasher<T> übergeben werden... Da hab ich erstmal aufgegeben.