Comparación con otros sistemas de señales

(Nota aparte: GTK+ llama a este esquema «señalización»; el lector perspicaz con experiencia en kits de herramientas de IGU notará que este mismo diseño se ve a menudo bajo el nombre de «emisor-receptor» (por ejemplo, en la plataforma de Metrowerks PowerPlant para los Macintosh). Funciona casi de la misma manera: uno establece emisores, y después les conecta receptores; el emisor tiene una lista de los objetos que lo están recibiendo, y cuando alguien le envía un mensaje al emisor, llama a todos sus objetos en su lista con el mensaje. En gtkmm, los objetos de señales hacen de emisores, y los «slots» de receptores, o algo así. Se hablará de este tema más adelante).

Los gestores de señales de gtkmm son de «tipado fuerte», mientras que el código C de GTK+ le permite conectar un retorno de llamada con el número y tipo incorrecto de argumentos, llevando a una violación de acceso en tiempo de ejecución. Y, a diferencia de Qt, gtkmm logra esto sin modificar el lenguaje C++.

Acerca de reemplazar gestores de señales: puede hacer esto en el mundo de C plano de GTK+, también; para eso existe el sistema de objetos de GTK+. Pero en GTK+, hay que realizar algunos procedimientos complicados para obtener características orientadas a objetos como herencia y sobrecarga. En C++, es simple, dado que esas características se soportan en el lenguaje en sí; puede dejarle el trabajo pesado al compilador.

Este es uno de los lugares en los que se muestra realmente la belleza de C++. Uno no consideraría heredar un widget de GTK+ simplemente para reemplazar a su método de acción; es mucho problema. En GTK+, casi siempre se usan señales para realizar las tareas, a menos que se estuviera escribiendo un widget nuevo. Pero, dado que reemplazar métodos es tan fácil en C++, es enteramente práctico (y razonable) heredar de un botón para ese propósito.