Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
1-1116396618
Миша
2005-05-18 10:10
2005.06.06
КАК ВЫКОВЫРЯТЬ ТЕКСТ ИЗ WORD?


1-1116923548
Phoenix
2005-05-24 12:32
2005.06.06
Субменю в PopupMenu


14-1116438116
pkm
2005-05-18 21:41
2005.06.06
Скачать Help для delphi.


8-1108712654
tradakad
2005-02-18 10:44
2005.06.06
работа с видео файлом


4-1113380006
ASoft
2005-04-13 12:13
2005.06.06
Как "запустить" функцию?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский