Liaison avec des paramètres supplémentaires

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<Glib::ustring>( 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:
virtual void on_button_clicked(Glib::ustring data);
Of course, a normal "clicked" signal handler would have no arguments.

sigc::bind() n'est pas d'usage courant, mais peut-être le trouverez-vous commode parfois. Si vous êtes un familier de la programmation avec GTK+, vous avez alors probablement noté la similitude avec les paramètres supplémentaires gpointer data que toutes les fonctions de rappel possèdent. Généralement, cette possibilité est utilisée à l'excès dans GTK+ pour passer des informations qui devraient être stockées dans une donnée membre d'un élément graphique dérivé, mais la dérivation des éléments graphiques est très difficile en C. Nous avons beaucoup moins besoin de cette façon de faire dans gtkmm.