Форум: "Основная";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Внизиспользование указателей на методы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c