使用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比较好,只有一个头文件
我所知的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比较好,只有一个头文件
相关文章推荐
- 使用piece和插槽灵活实现3D游戏中的换装系统
- linux-2.6.24.4内核移植到s3c2440----使用busybox-1.9.2制作根文件系统
- android中风格以及系统资源的使用
- Java千百问_02基本使用(013)_linux系统如何管理环境变量
- 监控Linux系统的内存和CPU,并使用excel表格绘制曲线
- activity间数据传递实例_使用系统短信发送器发送数据
- android prgoressBar setProgressDrawable 在4.0系统式正常,在2.3系统上不能正常使用的问题
- 构建根文件系统二之安装使用glibc库
- 使用 /sys 文件系统访问 Linux 内核
- Android 使用系统签名打包apk
- Unity_脚本与寻路系统的结合使用_013
- Linux 查看磁盘分区、文件系统、使用情况的命令
- 启明星系统使用在线视频教程
- 什么是挂载?为什么在Linux系统下U盘要先挂载才能使用?挂载步骤是怎样的?
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- windows下eclipse中——使用系统签名机制
- 使用U盘装win10系统
- Ruby系列文章之6 ---OS X 10.8.1 系统 HomeBrew的安装和简单使用
- linux下使用kpartx挂载虚拟文件系统