Есть ли способ передать модификаторы параметров или избежать этой ошибки?
Нет. Функция, которую вы поставляете, SomeProc
должна иметь подпись, которая соответствует TFunc<Integer, Integer>
.
Мне нужно передать функцию как параметр:
procedure SomeProc(AParameter: TFunc<Integer, Integer>);
Когда у меня есть эта функция ...
function DoSomething(AInput: Integer): Integer;
...
SomeProc(DoSomething);
...
... код работает. Но с параметрическими модификаторами, такими как const, var или значения по умолчанию, например ...
function DoSomething(const AInput: Integer = 0): 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;