Библиотека сайта rus-linux.net
Программирование с использованием gtkmm 3. Создание собственных сигналов
Оригинал: Programming with gtkmm 3Авторы: Murray Cumming, Bernhard Rieder, Jonathon Jongsma, Ole Laursen, Marko Anastasov, Daniel Elstner, Chris Vine, David King, Pedro Ferreira, Kjell Ahlstedt
Дата публикации: 15 Октября 2013 г.
Перевод: А.Панин
Дата перевода: 25 Апреля 2014 г.
Приложение C. Создание собственных сигналов
Теперь, когда вы познакомились с сигналами и обработчиками сигналов, применяемыми в gtkmm, у вас может возникнуть желание использовать аналогичную технику для реализации механизма взаимодействия ваших собственных классов. На самом деле подобный механизм взаимодействия реализуется достаточно просто исключительно средствами библиотеки libsigc++.
Механизм сигналов не является исключительно технологией gtkmm для обработки событий графического интерфейса. gtkmm использует библиотеку libsigc++ с целью реализации оберток для системы сигналов GTK+, но при разработке новых, не имеющих отношения к GTK+ сигналов вы можете создавать их реализации на основе технологий языка программирования C++ путем использования шаблона sigc::signal<>
.
bool
и int
, вам следует просто объявить экземпляр класса sigc::signal
так же, как показано ниже:
sigc::signal<void, bool, int> signal_something;
Вы можете объявить этот сигнал как простую публичную переменную класса, но некоторые разработчики считают такие объявления некорректными и предпочитают предоставлять доступ к переменной с помощью специального метода доступа таким образом, как показано ниже:
server.signal_something().connect( sigc::mem_fun(client, &Client::on_server_something) );
C.1. Пример
Это полнофункциональный пример, в котором описываются и применяются пользовательские сигналы.
Файл: server.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: client.h
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: client.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: main.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Файл: server.cc
(Для использования совместно с gtkmm 3, а не с gtkmm 2)
Следующий раздел : Приложение D. Сравнение со сторонними системами обработки сигналов.