Форум: "Потрепаться";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Вниз
С++ и события Найти похожие ветки
← →
марсианин © (2004-12-13 14:41) [0]если мы на делфи пишем так:
type TMyEvent = procedure (n:integer) of object;
причем парамтр типа TMyEvent можно пихать в функцию..
напр.
type TMyClass = class
procedure some_proc(n:integer);
end;
......
procedure do_smth( action:TMyEvent)
begin
.....
if (assigned(action)) then action(n);
.....
end;
......
//вызов
var mc:TMyClass;
.....
do_smth(mc.some_proc);
....
есть ли такое в С++?
единствненное, чего приходит на ум - это
вместо TMyEvent будем передавать свой класс с виртуальной функцией..
struct CMetod
{
virtual void execute( int n) = 0;
};
class my_class
{
void some_proc(int i) ;
friend class CMyMethod;
public:
class CMyMethod :public CMetod
{
my_class * ptr;
public:
CMyMethod(my_class * pthis) : ptr(pthis)
{}
virtual void execute( int n)
{
ptr->some_proc(n);
}
};
.......
};
....
void do_smth( CMetod * action)
{
.....
if (!action) action->execute(n);
.....
}
......
//вызов
my_class mc;
.....
my_class::CMyMethod act(&mc);
CMetod *pa = dynamic_cast <CMetod *> (&act); //наверное, можно и без dynamic_cast
do_smth(pa);
....
это работает, но как-то, ИМХО, через задницу..
может, есть способ лучше??
неужели там нет аналога typeTMyEvent = procedure (n:integer) of object;
???
← →
wicked © (2004-12-13 14:44) [1]в билдере - __closure...
в классическом си++ - искать по ключевому слову closure, есть статьи и примеры с использованием шаблонов...
← →
марсианин © (2004-12-13 15:16) [2]чего? причем здесь это?
к тому же в индексе VS все равно этого нет..
на RSDN нашлась статья http://www.rsdn.ru/article/cpp/cxx_events.xml
← →
Igorek © (2004-12-13 21:04) [3]
> неужели там нет аналога type TMyEvent = procedure
> (n:integer) of object;???
Есть аналоги в частных реализациях - тот же closure. А в чистом С++ нету of object.
void A::f(void) и void B::f(void) - имеют разные сигнатуры. А потому для указателей на них не существует типа.
> вместо TMyEvent будем передавать свой класс с
> виртуальной функцией..
Если тебе известен класс, то ты можешь прямо определить тип указателя на его метод и передавать/сохранять/вызывать.
← →
марсианин © (2004-12-13 21:36) [4]
> Если тебе известен класс, то ты можешь прямо определить
> тип указателя на его метод и передавать/сохранять/вызывать.
о! как это сделать?
← →
Igorek © (2004-12-14 01:40) [5]марсианин © (13.12.04 21:36) [4]
> о! как это сделать?
Просто. Почитать про указатели на функции и про typedef. :-)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.054 c