Главная страница
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.044 c
2-1147598754
Firefly
2006-05-14 13:25
2006.05.28
web-программирование


1-1145653640
Leonardo
2006-04-22 01:07
2006.05.28
Как определить есть ли в переменной типа TIcon сама иконка


2-1147349923
pavelf
2006-05-11 16:18
2006.05.28
Удалить папку


8-1135176215
Woolen
2005-12-21 17:43
2006.05.28
Формат bitmap


1-1145436571
apl
2006-04-19 12:49
2006.05.28
Добавление компонентов! Подскажите!