Enlazar argumentos adicionales

If you use one signal handler to catch the same signal from several widgets, you might like that signal handler to receive some extra information. For instance, you might want to know which button was clicked. You can do this with sigc::bind(). Here's some code from the helloworld2 example.

m_button1.signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &HelloWorld::on_button_clicked), "button 1"));
This says that we want the signal to send an extra Glib::ustring argument to the signal handler, and that the value of that argument should be "button 1". Of course we will need to add that extra argument to the declaration of our signal handler:
void on_button_clicked(const Glib::ustring& data);
Of course, a normal "clicked" signal handler would have no arguments.

sigc::bind() no se usa comúnmente, pero a veces la encontrará útil. Si está familiarizado con programación en GTK+, entonces probablemente ya haya notado que esto es similar a los argumentos gpointer data adicionales que todos los retornos de llamada de GTK+ tienen. Generalmente se abusa de esto en GTK+ para pasar información que debe almacenarse como datos miembros en un widget derivado, pero la derivación de widgets es muy difícil en C. Hay mucha menos necesidad de este «hack» en gtkmm.