Escribir gestores de señales

Para descubrir qué tipo de gestor de señales puede conectar a una señal, puede buscarlo en la documentación de referencia en el archivo de cabecera. Aquí hay un ejemplo de una declaración de señal que puede ver en las cabeceras de gtkmm:

Glib::SignalProxy<bool(Gtk::DirectionType)> signal_focus()

Other than the signal's name (focus), the template arguments are important to note here. The first argument, bool, is the type that the signal handler should return; and the type within parentheses, Gtk::DirectionType, is the type of this signal's first, and only, argument. By looking at the reference documentation, you can see the names of the arguments too.

Los mismos principios se aplican a las señales que tienen más argumentos. Aquí hay una con tres (tomada de <gtkmm/textbuffer.h>):

Glib::SignalProxy<void(TextBuffer::iterator&, const Glib::ustrin&, int)> signal_insert();

It follows the same form. The first type is void, so that should be our signal handler's return type. The following three types are the argument types, in order. Our signal handler's prototype could look like this:

void on_insert(TextBuffer::iterator& pos, const Glib::ustring& text, int bytes)