Шрифт:
Введение
Так уж исторически сложилось, что в языке С++ нет событий. Событием (event) является исходящий вызов (программисты на VB хорошо знакомы с ними) и в С++ их действительно нет. Иногда события путают с сообщениями (message), но это не верно. Сообщение это прямой вызов: например windows вызывает оконную процедуру для передачи собщения окну. Объект (система) вызывает функцию обькта(окна). Вызов происходит от объекта к объекту. В отличии от сообщения событие имеет другую механику. Объект инициирует событие и вызываются все объекты-обработчики. Т.е. от одного объекта к нескольким.
Раз уж в С++ события на уровне языка не поддерживаются, значит стоит организовать их на уровне библиотеки. Здесь приведена реализация такой библиотеки. В ней есть два класса signal и slot.
Итак, чтобы сделать какой нибудь класс источником события поместите в него переменную типа signal:
А чтобы сделать класс обработчиком поместите в него переменную типа slot, функцию обработчик и свяжите slot с обработчиком:
Так как эти объекты являются частью своих хозяев, не нужно заботится о времени жизни связи. Ее разрыв произойдет во время разрушения одного из них. Событие же инициируется вызвовом метода signal::raise:
Пример
В примере создаются два класса обработчик и инициатор события, устанавливается связь между ними и иллюстрируется обработка события в нескольких объектах одновременно:
Краткое описание классов
signal – cобытие (детали реализации опущены)
slot – переходник для обработки события в классе-обработчике (детали реализации опущены)
Вечный. Книга I
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
рейтинг книги
Как притвориться идеальным мужчиной
Дом и Семья:
образовательная литература
рейтинг книги
Тот самый сантехник. Трилогия
Тот самый сантехник
Приключения:
прочие приключения
рейтинг книги
Третий. Том 4
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
рейтинг книги
В погоне за женой, или Как укротить попаданку
Фантастика:
фэнтези
рейтинг книги
Дочь Хранителя
1. Легенды Сопределья
Фантастика:
фэнтези
рейтинг книги
Соль этого лета
1. Самбисты
Любовные романы:
современные любовные романы
рейтинг книги
Измена. Тайный наследник
1. Тайный наследник
Фантастика:
фэнтези
рейтинг книги
Он тебя не любит(?)
Любовные романы:
современные любовные романы
рейтинг книги
Брачный сезон. Сирота
Любовные романы:
любовно-фантастические романы
рейтинг книги
Английский язык с У. С. Моэмом. Театр
Научно-образовательная:
языкознание
рейтинг книги
