|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Указатель на метод в C++ |
|
Указатель на метод в C++
|
Ветеран Сообщения: 1180 |
Профиль | Отправить PM | Цитировать Есть классы A, и B : public A. Нужно, чтобы в A содержался список указателей на методы B. Известны только прототипы методов, но сколько и какие - не известно. Хотелось бы что-то вроде
A { typedef int(B::*handler)(); map<int,handler> eventmap; public: ... } B : public A { void handler1(); void handler2(); ... } Перевести B::* в A::* нельзя (требование ISO/C++), а в A класс B неизвестен. |
|
Отправлено: 11:40, 02-04-2004 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:04, 02-04-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Ещё раз: класс B в A неизвестен. Например:
class Control {...} ... class TrackBar : public Control {...} Contol-у абсолютно пофигу на TrackBar. Но хотелось бы поместить в Control обработчик события, который может не перекрывать TrackBar. Событие может и не обрабатываться, а вставлять пустую виртуальную функцию не хочется. Хочу сделать так: class elink : public pair<UMSG, Handler> { bool operator<(...) } vector<elink> events; ... { ... i = lower_bound(events.begin(), events.end(), message); if (i!=events.end() && i->first==message) { (this->*Handler)(params) } } Это вроде как самая быстрая реакция на виндозные послания. |
Отправлено: 11:57, 05-04-2004 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Да, я понял. Все портит наследование B : public A.
Цитата Страуструп:
Цитата Страуструп:
Вообще Ваша задача решается объявлением еще одного класса - указателя на функцию и его использованием и в классе А и в классе В. Это не так красиво, как хотелось бы, но ИМХО, вариантов больше нет. |
||
Отправлено: 15:37, 05-04-2004 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Приятно, что в сети есть отзывчивые люди. С классом-функцией у меня, конечно, ничего не получилось (внутри не удаётся присвоить пресловутый A::* к B::*). Я сделал через union. Код получился овратительный, поэтому буду искать другие варианты. Спасибо, hasherfrog, за содействие; Возникнут какие мысли - подкинь, пожалуюста.
|
|
Отправлено: 09:57, 08-04-2004 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Теория - Указатель на многомерный массив (Pascal) | Kowu | Программирование и базы данных | 2 | 02-11-2009 22:09 | |
Разное - Указатель мышки... | lexa264 | Microsoft Windows 2000/XP | 7 | 04-04-2009 12:27 | |
VBS/WSH/JS - [решено] Указатель на функцию | pva | Скриптовые языки администрирования Windows | 1 | 18-11-2008 15:31 | |
Указатель ввода текста | NetName | Microsoft Windows 2000/XP | 4 | 26-05-2006 14:21 | |
Можно ли создать указатель на указатель? | Sharkky | Программирование и базы данных | 2 | 24-09-2003 14:35 |
|