Delphi TFunc<;T>;-有没有办法传递输入参数修改器?

Delphi TFunc<;T>;-有没有办法传递输入参数修改器?,delphi,generics,Delphi,Generics,我需要将函数作为如下参数传递: procedure SomeProc(AParameter: TFunc<Integer, Integer>); SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end); …代码有效。但是使用参数修改器,如const、var或默认值,如 function DoSomething(const AInput: Integer = 0): Integer

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

procedure SomeProc(AParameter: TFunc<Integer, Integer>);
SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);
…代码有效。但是使用参数修改器,如const、var或默认值,如

function DoSomething(const AInput: Integer = 0): Integer;
…编译器返回不匹配参数列表的错误

是否有方法传递参数修改器,或避免此错误

非常感谢你的建议

是否有方法传递参数修改器,或避免此错误

不可以。您提供给
SomeProc
的函数必须具有与
TFunc

匹配的签名。您可以使用以下匿名方法将其包装:

procedure SomeProc(AParameter: TFunc<Integer, Integer>);
SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);

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

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;

您建议如何指定此函数?函数DoSomething(const-AInput:Integer=0):整数;你不能传递那个函数。编写另一个包装它并将调用转发给不兼容的函数。