TFunc<T> - 有什么方法可以传递输入参数修饰符吗?

问题描述 投票:0回答:3

我需要像这样传递一个函数作为参数:

procedure SomeProc(AParameter: TFunc<Integer, Integer>);

当我有这个功能时...

function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...

...Delphi 编程代码可以工作。但可以通过参数修改(如

const
var
)或默认值(如...

function DoSomething(const AInput: Integer = 0): Integer;

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

有什么方法可以传递参数修饰符,或者避免这个错误吗?

非常感谢您的建议。

function delphi generics parameter-passing
3个回答
7
投票

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

SomeProc(function(Arg: Integer): Integer begin Result := DoSomething(Arg) end);

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;

4
投票

有什么方法可以传递参数修饰符,或者避免这个错误吗?

不。您提供给

SomeProc
的函数必须具有与
TFunc<Integer, Integer>
匹配的签名。

© www.soinside.com 2019 - 2024. All rights reserved.