Я пытаюсь создать пользовательский сопоставитель, который позволяет назначить функцию сравнения внутреннему полю. Чтобы облегчить создание сопоставления, я попытался добавить конструктор-подобную функцию класса Construct
, которая инициализирует компаратор.
Теперь, если я попытаюсь скомпилировать следующий пример, компилятор отобразит
[dcc32 Fehler] ConsoleDemo1.dpr(37): E2555 Символ "Результат" не может быть отслежен
У меня есть следующий пример-код:
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.