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

时间:2017-10-29 11:09:36

标签: delphi generics

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

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

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

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

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

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

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

有没有办法传递参数修饰符,或者避免这个错误?

非常感谢您的建议。

3 个答案:

答案 0 :(得分:5)

您可以将其包装在 Anonymous Method 中,如下所示:

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

答案 1 :(得分:4)

仅当您将其声明为方法参考时:

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;

答案 2 :(得分:3)

  

有没有办法传递参数修饰符,或者避免这个错误?

没有。您提供给JSON的功能必须具有与Class A { public: struct randomStruct { // some functions and variables here } } Class B { // and here I need to call my randomStruct from class A A::randomStruct myRandomStruct; // use the public definition in A } 匹配的签名。