Warum kann ich meine Funktionsreferenz keiner passenden Variablen zuordnen? E2555 wird angehoben
Ich versuche, einen benutzerdefinierten Vergleicher zu erstellen, mit dem die Vergleichsfunktion einem internen Feld zugewiesen werden kann. Um die Erstellung des Vergleichers zu vereinfachen, habe ich versucht, eine konstruktorähnliche Klassenfunktion @ hinzuzufügeConstruct
, wodurch der Vergleicher initialisiert wird.
Nun, wenn ich versuche, das folgende Beispiel zu kompilieren, zeigt der Compiler @ a
[dcc32 Fehler] ConsoleDemo1.dpr (37): E2555 Symbol 'Ergebnis' kann nicht verfolgt werden
Ich habe den folgenden Beispielcode:
program ConsoleDemo1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
Generics.Collections, Generics.Defaults,
System.SysUtils;
type
TConstFunc<T1, T2, TResult> = reference to function(const Arg1: T1; const Arg2: T2): TResult;
TDemo = class(TComparer<string>)
private
FVar: TConstFunc<string, string, Integer>;
function CompareInternal(const L, R: string): Integer;
public
class function Construct(): TDemo;
function Compare(const L, R: string): Integer; override;
end;
function TDemo.Compare(const L, R: string): Integer;
begin
Result := FVar(L, R);
end;
function TDemo.CompareInternal(const L, R: string): Integer;
begin
Result := AnsiCompareStr(L, R);
end;
class function TDemo.Construct: TDemo;
begin
Result := TDemo.Create();
Result.FVar := Result.CompareInternal;
end;
end.