![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
можно ли вызвать процедуру по её адресу? [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)