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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage