Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2011, 23:27   #1
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию обработка сообщений

добрый день.
имеется собственная gui-библиотека. в ней нет поддержки сигналов-слотов или подобного. для обработки клика по кнопке, к примеру, приходится сабклассить Button, перегружать виртуальную функцию click и передавать управление дальше, например, родительскому окну для обработки клика.
это дело порядком надоело. кто какие решения предложит? mfc-шный стиль мне не нравится, сигналы-слоты нереально. у меня есть одна идея, но озвучить пока не буду, хочу послушать ваши мысли.
спасибо.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.07.2011, 23:50   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

У меня валялась реализация делегата. Т.е. обёртка над функциями и методами списком. Сопоставляешь каждому событию (константа) один такой делегат, в компоненте реализуешь функцию подписки на событие, а как оно наступило, делаешь вызов и делегат сам вызывает все подписанные методы и функции.
Carbon вне форума Ответить с цитированием
Старый 02.07.2011, 00:03   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

на observer похоже. observer у меня реализован, но я не хочу его использовать в тривиальных классах, типа Button
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.07.2011, 00:17   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Дык события это и есть по сути наблюдатель. Хотя у меня реализовано то что нужно или я не понял. Что-то должно выкидывать события, что-то должно их ловить. Сигналы-слоты так же работают.
Carbon вне форума Ответить с цитированием
Старый 02.07.2011, 00:19   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Carbon
идея наблюдателя в том, что много наблюдателей могут следить за множеством объектов. мне это не нужно, излишняя сложность
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.07.2011, 00:24   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Посмотри, как сделаны делегаты в шарпе. У меня аналогично.
Код:
#include <iostream>
#include "delegate.hpp"


void exec(int x, float y)
{
	std::cout << "exec(" << x << ", " << y << ")" << std::endl;
}


class S
{
public:
	
	S(int id) : m_Id(id)
	{}
	
	void run(int a, float b)
	{
		std::cout << m_Id << "::run(" << a << ", " << b << ")" << std::endl;
	}
	
private:
	
	int m_Id;
	
};

int main(int, char **)
{
	S * obj = new S(123);
	
	delegate<int, float> del;
	del += FUNCTION(exec, int, float);
	del += METHOD(obj, S, run, int, float);
	
	del(777, 16.2);
	
	delete obj;
	
	return 0;
}
вывод:
Код:
exec(777, 16.2)
123::run(777, 16.2)

Последний раз редактировалось Carbon; 02.07.2011 в 00:28.
Carbon вне форума Ответить с цитированием
Старый 02.07.2011, 00:41   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Carbon
спасибо, материала по делегатам нарыл, почитаю. раньше с ними не работал. просто observer в явном виде ну очень не хочется использовать
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.07.2011, 01:00   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

когда-то тоже мечтал о своем UI, ничего особо умного не придумал: клик любого батона делает send сообщения с ID батона родительскому или верхнему окну.

Последний раз редактировалось f.hump; 02.07.2011 в 01:03.
f.hump вне форума Ответить с цитированием
Старый 02.07.2011, 01:25   #9
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Ну в общем сам смотри. Если нужен делегат, он у меня лежит. Постом выше пример его использования.
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка сообщений приложением Zemelya Общие вопросы C/C++ 1 12.02.2011 21:49
обработка сообщений из файла fiascko Общие вопросы Delphi 18 30.03.2010 09:44
Обработка сообщений в приложении без окон. kalexi Win Api 2 26.06.2009 20:12
Обработка сообщений в консольных приложениях Mixasik Общие вопросы Delphi 2 06.06.2009 22:50
Обработка сообщений иконки трея The_Darkness Win Api 18 15.07.2008 16:07