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

3
我需要像这样将函数作为参数传递:
procedure SomeProc(AParameter: TFunc<Integer, Integer>);

当我使用这个函数时,它会在控制台上输出一条消息。
function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...

...代码是可以工作的。但是使用参数修饰符(如const、var)或默认值时...

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

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

有没有办法传递参数修饰符或避免此错误?

非常感谢您的建议。

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> 匹配的签名。


你建议如何指定这个函数? function DoSomething(const AInput: Integer = 0): Integer; - Alexander Krylyk
你不能直接调用那个函数。需要编写一个包装函数,将调用转发到不兼容的函数。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接