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

Вниз

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

 
hasher   (2005-05-21 21:13) [0]

есть что-то вроде этого

type
 PFunction = ^TFunction;
 TFunction = function(i: Integer);

function f1(i: Integer): Inrteger;
function f2(i: Integer): Inrteger;

и есть ещё одна функция, скажем f3, которая должна вызывать одну из этих функций (заранее не известно какую именно).

я сделал так

function f3(i: Integer; f: TFunction): Integer;
begin
 Result:= f^(i);
end;

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

Подскажите пожалуйста как именно надо проделывть этот трюк...
Заранее благодарен.


 
begin...end ©   (2005-05-21 21:25) [1]

> hasher   (21.05.05 21:13)

> PFunction = ^TFunction;

А зачем это? Переменная типа TFunction уже будет адресом нужной функции. И тогда всё упрощается:

function F3(I: Integer; F: TFunction): Integer;
begin
Result:= F(I)
end.

Пример вызова:

... := F3(1, F1)


 
hasher   (2005-05-21 21:27) [2]

при таком вызове надо указывать параметры для f1:

:= f3(1, f1(j));


 
hasher   (2005-05-21 21:28) [3]

но тогда она вернёт значение типа Integer


 
begin...end ©   (2005-05-21 21:35) [4]

> hasher   (21.05.05 21:27) [2]

> при таком вызове надо указывать параметры для f1

Нет, не надо.

function F1(I: integer): Integer;
begin
 Result := I * 2
end;

function F2(I: integer): Integer;
begin
 Result := I * 3
end;

function F3(I: integer; F: TFunction): Integer;
begin
 Result := F(I)
end;

begin
 ... := F3(1, F1)
end.


 
hasher   (2005-05-21 21:39) [5]

действительно, работает!

чё-т я перемудрил...

ОГРОМНОЕ СПАСИБО



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

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

Наверх




Память: 0.47 MB
Время: 0.059 c
1-1116881272
Erick
2005-05-24 00:47
2005.06.06
Как нарисовать точку из 3-х координат?


1-1116646618
Vi
2005-05-21 07:36
2005.06.06
Запись/чтение динамического массива в/из файла - как?


1-1116594321
Erik1
2005-05-20 17:05
2005.06.06
Как учесть выравнивание в записи при переносе даных?


9-1110485805
Игнатенков Станислав
2005-03-10 23:16
2005.06.06
Игровой цикл


4-1113721831
Ola
2005-04-17 11:10
2005.06.06
Как при запуске приложения менять курсор мыши на мой собственный.