Arc*_*ius 1 c++ linux gtk coding-style callback
最近我开始了一个C++项目,以便熟悉GTK功能.我使用C++方法'因为我总是用java编程,所以在我看来很熟悉.
现在,GTK库是用C代码编写的,所以我在类和C代码之间实现了一些混合.我的一个问题是GTK事件与回调函数一起使用.为了将这些事件封装在类中,我使用了静态方法.
最重要的是静态方法和静态变量在类中是不可见的,而且我已经编写了一些其他静态函数,仅在类的.cpp文件中声明,从回调内部调用但与类完全分离.
在我看来这种方法有点笨拙,所以我想知道有没有最好的方法来处理类中的回调并允许它们以优雅的方式与类方法和结构进行交互?
谢谢!
是的,您需要在user_data参数中传递状态(例如,您使用此指针或指向某个插槽/仿函数的指针).否则,您将永远不会有一个类实例来调用您的成员方法.
这就是gtkmm所做的.举例来说,GTK ::集装箱::的foreach()使用静态(非成员)函数,传递一个提供sigc ::槽它: http://git.gnome.org/browse/gtkmm/tree/gtk/src /container.ccg#n166
信号代码(你在问题中称之为事件)是相似的,但稍微复杂一点 - 你可以在gtkmm中生成的.cc代码中看到.
但是,我也认为你应该使用gtkmm.这只是你最终会(而不是)解决自己的几个问题之一.