TFunc <T> - 有没有办法传递输入参数修饰符?

Ale*_*lyk 2 delphi generics

我需要将函数作为参数传递,如下所示:

procedure SomeProc(AParameter: TFunc<Integer, Integer>);
Run Code Online (Sandbox Code Playgroud)

当我有这个功能时......

function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...
Run Code Online (Sandbox Code Playgroud)

......代码有效.但是使用参数修饰符,如const,var或默认值,如...

function DoSomething(const AInput: Integer = 0): Integer;
Run Code Online (Sandbox Code Playgroud)

...编译器返回不匹配参数列表的错误.

有没有办法传递参数修改器,或避免这个错误?

非常感谢你的建议.

Uwe*_*abe 5

您可以将其包装在匿名方法中,如下所示:

SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);
Run Code Online (Sandbox Code Playgroud)


Fre*_*edS 5

仅当您将其声明为方法引用时:

type TDoSomething = reference to function(const AInput: Integer = 0): Integer;

function SomeProc(AParameter: TDoSomething): Integer;
begin
  Result := AParameter;
end;

function CallSomeProc: integer;
begin
  Result := SomeProc(function(const AInput: Integer = 0): Integer begin Result := AInput end);
end;
Run Code Online (Sandbox Code Playgroud)