Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
27. Jan 2015
Es passiert doch das gleiche wie in dem vorherigen Beispiel. Es wird ein Interface gewrappt
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
27. Jan 2015
@stahli *hüstel*
Es gibt da so eine Besonderheit mit den Interfaces und der direkten Argumentsübergabe. Das ist auch ein Grund, warum es bei den ganzen Comparer-Erzeugern eine class function Construct gibt und der normale constructor Create versteckt ist.
Nehmen wir mal das Eingangs-Beispiel
var
TCo: TPositionComparer;
LPC : IComparer<TPosition>
begin
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
27. Jan 2015
Man mag es kaum glauben, aber eine Instanz erzeugt man bei Delphi, wenn man den Konstruktor der Klasse aufruft (es gibt noch andere Wege, aber das ist der klassische Weg).
Und das T davor hat nichts zu sagen, denn es ist einfach nur ein Zeichen, jedes andere Zeichen ist genausogut. Wichtig ist nur, dass ich den exakten Bezeichner der Klasse und nicht die Instanz-Variable benutze.
Foo =...
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
27. Jan 2015
Häh? Beim TComparer<T>? Wo ist denn da was mit einem Hasher? Das kenne ich nur beim TEqualityComparer<T> und das wird z.B. für ein Dictionary benötigt.
Äuglein auf beim Eierkauf:
TComparer<T> vs. TEqualityComparer<T>
Und so wird der Comparer für TPosition gebaut:
TComparer<TPosition>.Construct(
function (const L, R: TPosition): integer;
begin
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
27. Jan 2015
Es gibt auch ein TComparer<T>.Construct ;)
Einfach mal in die Doku schauen