我需要将函数作为参数传递:
procedure SomeProc(AParameter: TFunc<Integer, Integer>);
当我有这个功能时......
function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...
......代码有效。但是使用参数修饰符,如const,var或默认值,如...
function DoSomething(const AInput: Integer = 0): Integer;
...编译器返回不匹配参数列表的错误。
有没有办法传递参数修饰符,或者避免这个错误?
非常感谢您的建议。
答案 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
}
匹配的签名。