Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

можно ли вызвать процедуру по её адресу? [D7, WinXP]


hasher ©   (2005-05-21 21:13:00) 

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

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;

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

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


hasher   (2005-05-21 21:39:00) [1]

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

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

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


begin...end   (2005-05-21 21:35:00) [2]

> 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:28:00) [3]

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


hasher   (2005-05-21 21:27:00) [4]

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

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


begin...end   (2005-05-21 21:25:00) [5]

> hasher   (21.05.05 21:13)

> PFunction = ^TFunction;

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

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

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

... := F3(1, F1)


Наверх

Титульная страница Поиск, карта сайта Написать письмо