Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

использование указателей на методы   Найти похожие ветки 

 
Arm79 ©   (2006-04-15 13:29) [0]

Уважаемые мастера.

Пытаюсь создать оболочку для "безопасного" исполнения методов некоторjго типа.

type
 TSomeMethod = function: boolean of Object;

function Auto(const SM: TSomeMethod ): boolean;
begin  
 Result := False;
 try
   Result := SM();
 except
   on E: Exception
   do begin
     ...
   end;
 end;
end;

Так работает.

А как вызывать таким образом функцию с параметрами?
То есть типа
procedure Proc1;
begin
  if Auto(Form.SomeMethod(Params, Values))
  then begin
   .....
  end;
end;


 
TUser ©   (2006-04-15 15:11) [1]

type
TSomeMethod = function (A: integer): boolean of Object;

function Auto(const SM: TSomeMethod; A: integer): boolean;
begin  
Result := False;
try
  Result := SM(A);
except
  on E: Exception
  do begin
    ...
  end;
end;
end;

Если число параметров может варьировать - то надо использовать open arrays. Про их использование написано в справке. Если также и тип параметров может различаться - через Variant надо разруливать.


 
Arm79 ©   (2006-04-15 17:23) [2]

Спасибо, я как то и не сообразил.


 
tesseract ©   (2006-04-15 17:32) [3]


> Если число параметров может варьировать - то надо использовать
> open arrays. Про их использование написано в справке. Если
> также и тип параметров может различаться - через Variant
> надо разруливать.

а что open arrays чуствительны к типу данных?


 
TUser ©   (2006-04-15 17:35) [4]

Open array parameters allow arrays of different sizes to be passed to the same procedure or function. To define a routine with an open array parameter, use the syntax array of type (rather than array[X..Y] of type) in the parameter declaration. For example,

function Find(A: array of Char): Integer;

declares a function called Find that takes a character array of any size and returns an integer.


 
tesseract ©   (2006-04-15 17:38) [5]


> function Find(A: array of Char): Integer;

Это dynamic arrays а не open. Лень шарится по справке, вот но такой код позволит передать любой тип данных:

function Find(A: array of Const): Integer;

либо

function Find(A: array of TvarRec): Integer;

что в приципе ондо и тоже


 
Джо ©   (2006-04-15 18:03) [6]

> [5] tesseract ©   (15.04.06 17:38)
>
> > function Find(A: array of Char): Integer;
>
> Это dynamic arrays а не open.

Нет, это именно open.


 
TUser ©   (2006-04-16 05:52) [7]


> Это dynamic arrays а не open. Лень шарится по справке, вот
> но такой код позволит передать любой тип данных:

Скажи это авторам справки по open arrays :)



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-1142866117
Wolferio
2006-03-20 17:48
2006.05.28
Кодировка DBF файлов


15-1146820243
McSimm
2006-05-05 13:10
2006.05.28
скачать интернет


15-1146662361
Ji
2006-05-03 17:19
2006.05.28
Найти ветку в архиве


3-1144073895
Anton_beginer
2006-04-03 18:18
2006.05.28
XP и MDAC - не встает


2-1147593076
MasteR2
2006-05-14 11:51
2006.05.28
Многоугольник и окружность