Как передать значение nil в параметре процедуры типа объекта - PullRequest
7 голосов
/ 07 июля 2011

Я хочу передать значение nil в параметре, который объявлен как procedure of object

Рассмотрим этот код

Дело 1

type
  TFooProc = procedure(Foo1, Foo2 : Integer) of object;


procedure DoSomething(Param1:Integer;Foo:TFooProc);overload;
var
  a, b : Integer;
begin
   a:=b*Param1;
   //If foo is assigned
   if @Foo<>nil then
    Foo(a, b);
end;

procedure DoSomething(Param1:Integer);overload;
begin      
  DoSomething(Param1,nil);//here the delphi compiler raise this message [DCC Error] E2250 There is no overloaded version of 'DoSomething' that can be called with these arguments
end;

Дело 2

Ì найдено, если я объявлю TFooProc как тип procedure, код будет скомпилирован. (но в моем случае мне нужен тип procedure of object)

type
  TFooProc = procedure(Foo1, Foo2 : Integer);


procedure DoSomething(Param1:Integer;Foo:TFooProc);overload;
var
  a, b : Integer;
begin
   a:=b*Param1;
   //If foo is assigned
   if @Foo<>nil then
    Foo(a, b);
end;

procedure DoSomething(Param1:Integer);overload;
begin
  DoSomething(Param1,nil);
end;

Дело 3

Также я обнаружил, что, если удалить директиву overload, код скомпилируется нормально

type
  TFooProc = procedure(Foo1, Foo2 : Integer) of object;


procedure DoSomething(Param1:Integer;Foo:TFooProc);
var
  a, b : Integer;
begin
   a:=b*Param1;
   //If foo is assigned
   if @Foo<>nil then
    Foo(a, b);
end;

procedure DoSomething2(Param1:Integer);
begin
  DoSomething(Param1,nil);
end;

Вопрос How i can pass the nil value as parameter? для работы с кодом в корпусе 1?

1 Ответ

12 голосов
/ 07 июля 2011

Введите ноль в TFooProc:

DoSomething(Param1, TFooProc(nil));
...