Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Указатель на метод в C++

Ответить
Настройки темы
Указатель на метод в C++
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


А что если перед объявлением A сказать, что есть такой класс B:
Код: Выделить весь код
 
class B; 
A { 
 typedef int(B::*handler)(); 
 map<int,handler> eventmap; 
... дальше все тоже самое, что и у Вас

Отправлено: 13:04, 02-04-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Да, я понял. Все портит наследование  B : public A.
Цитата Страуструп:
класс, который был поименован, но еще не был объявлен, нельзя использовать в качестве базового класса
Поэтому A должен быть объявлен до B. Но использование типа из класса B внутри его объявления обязывает компилятор знать полное объявление B, поскольку
Цитата Страуструп:
Явное или неявное преобразование указателя или ссылки на производный класс к указателю или ссылке на один из его базовых классов должно однозначно относиться к одному и тому же объекту этого базового класса
А класс A не знает, каким образом его наследует B.
Вообще Ваша задача решается объявлением еще одного класса  - указателя на функцию и его использованием и в классе А и в классе В. Это не так красиво, как хотелось бы, но ИМХО, вариантов больше нет.

Отправлено: 15:37, 05-04-2004 | #4

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Приятно, что в сети есть отзывчивые люди. С классом-функцией у меня, конечно, ничего не получилось (внутри не удаётся присвоить пресловутый A::* к B::*). Я сделал через union. Код получился овратительный, поэтому буду искать другие варианты. Спасибо, hasherfrog, за содействие; Возникнут какие мысли - подкинь, пожалуюста.

Отправлено: 09:57, 08-04-2004 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Указатель на метод в C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Теория - Указатель на многомерный массив (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




 
Переход