与其他信号系统的比较

GTK将自己的信号系统方案称为"信号传递";有使用其他GUI工具包经验的读者可能会注意到,这种设计经常会被称作"广播者-监听者"。它的工作方式大致为:先设置广播者(broadcasters),然后将监听者(listeners)与它连接。广播者会保留一个监听者对象列表,当有某人向广播者发送消息时,它将向列表中所有对象发送消息。在gtkmm中,信号对象扮演广播者的角色,而槽扮演监听者的角色。

gtkmm的信号处理函数是强类型的,而gtk的C代码啊运行你连接到一个使用错误参数数量和类型的回调函数,这会导致运行时出现段错误。并且和Qt不同,gtkmm不需要对C++语言进行修改即可达到此目的。

虽然你也能在C语言中覆写信号处理函数(这是GTK使用对象系统的目的),但是由于语言对于高级特性的支持特别弱,你需要编写一系列复杂的代码才能做到继承和重载。而在C++中,因为语言本身就支持这些特性,所以你可以让编译器代为完成肮脏的工作。

这是真正体现C++魅力的地方之一。没有人会只为了覆写GTK部件的成员函数就将其子类化,这过于麻烦。除非是为了编写新的部件否则基本上都是利用信号完成任务。而在C++中覆写成员函数非常简单,因此为了修改部件的某个行为而将其子类化是完全可行且明智的。