TFunc <T> - есть ли способ передать модификаторы входных параметров?

Мне нужно передать функцию как параметр:

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

Когда у меня есть эта функция ...

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

... код работает. Но с параметрическими модификаторами, такими как const, var или значения по умолчанию, например ...

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

... компилятор возвращает ошибку списка параметров несоответствия.

Есть ли способ передать модификаторы параметров или избежать этой ошибки?

Большое спасибо за ваши предложения.

delphi,generics,

2

Ответов: 3


3 принят

Есть ли способ передать модификаторы параметров или избежать этой ошибки?

Нет. Функция, которую вы поставляете, SomeProcдолжна иметь подпись, которая соответствует TFunc<Integer, 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;
Дельфы, дженерики,
Похожие вопросы