您的位置:首页 > 编程语言 > C语言/C++

使用sigc++插槽系统

2013-11-19 09:53 218 查看
http://www.cppblog.com/gaimor/archive/2010/02/22/108236.html?opt=admin

我所知的c++插槽系统由3个boost的,sigslot的,sigc++的
这里介绍sigc++的使用

最基本的使用方法:

1.回调函数为一般函数:
代码如下:

1 #include <iostream>
2 #include <string>
3 #include <sigc++/sigc++.h>
4
5 //! 普通函数
6 void Print(const std::string& str)
7 {
8 std::cout << str;
9 }

int main()
{
//! 返回值void,参数const std::string&
sigc::signal<void, const std::string&> signal_print;
//! 链接函数
signal_print.connect( sigc::ptr_fun(&Print));
//! 发射信号
signal_print.emit("hello world\n");

system("pause");
return 0;
}

2.回调函数为成员函数

1 #include <iostream>
2 #include <string>
3 #include <sigc++/sigc++.h>
4
5 class Printer :public sigc::trackable
6 {
7 public:
8 void Work(){slot.emit("work\n");}
9 typedef sigc::signal<void, const std::string&> Slot;
Slot slot;
void Print(const std::string& str){std::cout<<str;}
};

int main()
{
Printer printer;
Printer::Slot::iterator iter = printer.slot.connect(sigc::mem_fun(&printer,&Printer::Print));
printer.Work();
iter->disconnect();
printer.Work();

system("pause");
return 0;
}

在sigc++中sigc::ptr_fun负责绑定一般函数
而sigc::men_fun负责绑定成员函数.

可以看到一般的信号插槽系统都具备以下几个函数
a.插槽连接
b.插槽断开
c.信号发射
当然有的插槽信号库还提供其它一些函数
比如对信号设定优先级等等

这是简单实用sigc++的例子
不过若论简单性的话还是sigslot比较好,只有一个头文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: