Crear sus propias señales
Ahora que ha visto señales y manejadores de señales en gtkmm, tal vez quiera usar la misma técnica para permitir interacción entre sus propias clases. Eso es realmente muy simple usando la biblioteca libsigc++ directamente.
Esto no es un asunto único de gtkmm o de IGU. gtkmm usa libsigc++ para implementar sus envoltorios de proxy para el sistema de señales de GTK+, pero para las señales nuevas que no son de GTK+, puede crear señales de C++ puras, usando la plantilla sigc::signal<>.
For instance, to create a signal that sends 2 parameters, a bool and an int, just declare a sigc::signal, like so:
sigc::signal<void, bool, int> signal_something;
You could just declare that signal as a public member variable, but some people find that distasteful and prefer to make it available via an accessor method, like so:
class Server { public: //signal accessor: typedef sigc::signal<void, bool, int> type_signal_something; type_signal_something signal_something(); protected: type_signal_something m_signal_something; }; Server::type_signal_something Server::signal_something() { return m_signal_something; }
You can then connect to the signal using the same syntax used when connecting to gtkmm signals. For instance,
server.signal_something().connect( sigc::mem_fun(client, &Client::on_server_something) );
- C.1. Ejemplo