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

Вниз

Callback-функции   Найти похожие ветки 

 
TUser ©   (2006-04-25 12:35) [0]

Можно ли использовать локальную процедуру (функцию) в качестве call-back. Например, можно использовать такой код

type
TAAA = function (...): ...;

function AAA (...): ...; // функция типа TAAA
begin
end;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;
begin
 BBB (AAA);
end;

Хотелось бы передавать функции BBB локально объявленную процедуру (функцию). Т.е. что такое

type
TAAA = function (...): ...;

procedure BBB (Func: TAAA);
begin
 Func (...)  
end;

procedure CCC;

function AAA (...): ...; // функция почти типа TAAA
begin
end;

begin
 BBB (AAA);
end;

К сожалению, Паскаль так не умеет. Не компилирует, ибо запрещено правилами языка (incomparable types). Можно ли как-нибудь обмануть компилятор?

Компилятор - Delphi 7.


 
Сергей М. ©   (2006-04-25 12:43) [1]


> почти типа


Что значит "почти типа" ?

Паскаль таких "вольностей" не допускает ..


 
begin...end ©   (2006-04-25 12:46) [2]

> TUser ©   (25.04.06 12:35)

> BBB (AAA);

BBB (TAAA(@AAA));


 
Гаврила ©   (2006-04-25 12:52) [3]

Нельзя.


 
TUser ©   (2006-04-25 12:56) [4]

begin...end ©   (25.04.06 12:46) [2]
Точно. Спасибо.


 
evvcom ©   (2006-04-25 14:05) [5]

Через указатели и приведение типов можно обманывать компилятор, как вздумается (я уж не говорю про ассемблер). Главное - понимать, что делаешь, иначе скорее всего словишь AV.


 
jack128 ©   (2006-04-25 14:52) [6]

evvcom ©   (25.04.06 14:05) [5]
Главное - понимать, что делаешь, иначе скорее всего словишь AV.

в данном случае в 99% словишь AV.


 
jack128 ©   (2006-04-25 14:55) [7]

jack128 ©   (25.04.06 14:52) [6]
точнее так: если AAA использует локальные переменные, объявленные в ССС - то AV гарантирован..


 
evvcom ©   (2006-04-25 15:08) [8]

Ну про количество процентов (99% или 99,99% :) ) спорить не буду, т.к. вычислить его практически невозможно. А вот то, что AAA локальная функция в ССС только сейчас обратил внимание. Ну а смысла ее делать локальной без использования лок.переменных CCC тоже не вижу. Посему способ явно не гуд.


 
TUser ©   (2006-04-25 15:20) [9]

Уже наступил на эти грабли. ААА теперь глобальная, аминь.



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
2-1145789647
Начинающий5
2006-04-23 14:54
2006.05.14
Ctrl + del


2-1146063873
Archy
2006-04-26 19:04
2006.05.14
округление


2-1145705208
FunkyByte
2006-04-22 15:26
2006.05.14
Несколько вопросов про потоки и сообщения


2-1146036867
Scavenger
2006-04-26 11:34
2006.05.14
Путь


2-1146116795
makvell
2006-04-27 09:46
2006.05.14
Прогресс