【发布时间】:2021-03-02 21:40:57
【问题描述】:
在 GTK 中处理按钮按下的典型方法是:
g_signal_connect(GTK_BUTTON(myButton), "pressed", G_CALLBACK(myButtonHandler), NULL);
但是,我发现使用字符串(例如"pressed")进行内部识别是不好的、缓慢的和不必要的。如果我能找到与此相对应的数字信号 ID,我可以跳过解析步骤。但是如何通过 ID 而不是字符串名称连接事件?我做了很多挖掘,找到了this,我还了解到g_signal_connect是一个扩展为g_signal_connect_data的宏,但是这些都不能完全解决我的问题。
这可能吗,如果可以,我该怎么做?
【问题讨论】:
-
您的问题到底是什么?解析短字符串,很可能只在启动时解析一次,不应该是一个明显的问题。使用字符串而不是 ID 可以使系统对构建和执行期间使用的不同版本的库具有鲁棒性。
-
@Gerhardh 但是,为什么要使用字符串而不是宏?使用字符串进行识别很糟糕
-
我刚刚提到了原因。如果您在列表中插入另一个字符串,则字符串不会失败。尝试使用一些枚举作为 ID。
-
@Gerhardh 宏也不会失败
-
编译器不知道宏。它们被扩展为字符串或 ID。这里没有区别。
标签: c gtk micro-optimization