【发布时间】:2017-06-29 00:20:13
【问题描述】:
我有一个回调函数如下:
void handle(GtkWidget *widget, gpointer data) {...}
由于这个窗口有很多小部件,我想使用这个回调作为唯一的处理程序,以避免编写一堆小函数。最初我想使用一个存储在环绕窗口的 UI 类中的枚举,然后我会按如下方式对其进行测试:
UIClass::Signal signal = (UIClass::Signal) data;
switch (signal) {
case UIClass::main_button:
// handle
case UIClass::check_box:
...
}
但编译器拒绝在该 sn-p 的第一行进行强制转换。
有没有标准的方法来完成这个?还是 GTK+ 设计为每个小部件都有一个处理程序?
【问题讨论】:
-
您是否将 c++ 枚举转换为指针然后返回?
-
1) 并非所有信号都有相同的回调原型。这些信号都是同一种信号吗? 2) 小部件可以有一个名称,使用它,然后在回调中获取小部件名称,您就可以开始了,但请注意 1)!
-
@jku 到 gpointer,是的。何塞,看来我必须走那条路。我宁愿避免字符串比较