失去爱 发表于 2012-4-19 01:36:40

gtkmm下的timerout 学到的sigc的几个函数

在gtkmm的官网有个gtkmm学习文档.看到timouts时..借用它的部分代码.也跟着示例做了一下..但编译时在此句出错

sigc::slot<bool> my_slot = sigc::bind(sigc::mem_fun(*this,&TimerExample::on_timeout), m_timer_number);
//on_timerout回调函数
//int m_timer_number


但如果编译文档提供的代码却不会出现问题
最开始.无论我怎么修改这句.都过不去.去网上查sigc::slot 和sigc::bind却没有找到有用的信息.无奈之下.把官方提供的代码全部复制.进行修改.经过简化.和测试.终于找到问题所在.问题出在以下几个函数上.

sigc::bind 绑定: 是把此函数的最后一个参数(m_timer_number)的值传递给sigc::mem_fun连接的函数(on_timeout).所以.我们的函数就须要一个参数.
sigc::slot<bool> 这是什么我现在还不太明白.但它须要我的函数(on_timeout)返回一个参数.我试了下.什么参数都行.不返回也没关系.只是函数声明和定义里有返回类型就可以了.sigc::slot<bool>里的bool也可以换.但不能为void 和NULL.至于为什么我就不知道了.希望高手指点

所以.我们的回调函数就应该是这样的
class {
bool on_timeout(int time_numbs);
};

之后.开始正式连接
sigc::connection conn = Glib::signal_timeout().connect(my_slot, timeout_value);
//my_slot 参看第一个代码
//int timeout_value 间隔时间


这里就很简单了.这里要说的是.当我们的回调函数(on_timeout)不须要参数时.我们可以省略sigc::slot 直接在my_slot位置换上sigc::mem_fun().
sigc::mem_fun:绑定指定类的指定函数
sigc::ptr_fun    绑定函数
sigc::bind可能是组某函数指定参数
sigc::slot包装sigc::bind的.<不知道理解的对不对>

至此.我的理解也结束了.现在并不太明白sigc里面是做什么的.望有人指定一二

qzuser 发表于 2013-1-5 08:05:25

qzuser 发表于 2013-1-10 08:57:10

ekd123 发表于 2013-1-28 13:38:02

SigC++ 是實現類似 GObject 信號功能的東西。(這個在主頁應該就有吧!)

qzuser 发表于 2013-2-4 21:06:18

页: [1]
查看完整版本: gtkmm下的timerout 学到的sigc的几个函数