Enlazar argumentos adicionales

Si usa un manejador de señales para atrapar la misma señal desde varios widgets, tal vez quiera que el manejador de señales reciba información adicional. Por ejemplo, puede querer saber qué botón se pulsó. Puede hacer esto con sigc::bind(). Aquí hay un código del ejemplo helloworld2, que encontrará después.

m_button1.signal_clicked().connect( sigc::bind<Glib::ustring>( sigc::mem_fun(*this, &HelloWorld::on_button_clicked), "button 1") );
Suponga que quiere que la señal envíe un argumento Glib::ustring adicional al manejador de señales, y que el valor de ese argumento sea «button 1». Por supuesto, se necesitará añadir ese argumento adicional a la declaración del manejador de señales:
virtual void on_button_clicked(Glib::ustring data);
Naturalmente, un manejador de señal «clicked» normal no tendría argumentos.

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.