Boost(四)——事件处理

结合Boost官网

对于连接函数而言,有两种方法解决连接的是临时对象的成员函数。

第一种:

类继承:public boost::signals::trackable 当对象死亡,connect函数自动解除连接。

第二种:

由于信号的声明(boost::signal(void()> s 假设是void类型不带参数的函数信号)

其返回值用boost::signals::scoped_connection接收,当临时对象死亡,connect函数也会解绑。

 

题目:

编写一个程序,定义一个名为 button 的类,表示GUI中的一个可点击按钮。 为该类加入两个方法 add_handler() 和remove_handler(),它们均要求一个函数名作为参数。 如果 click() 方法被调用,已登记的函数将被按顺序执行。

如下测试你的代码,创建一个 button 类的实例,从事件处理器内部向标准输出流写出一个信息。 调用 click() 函数模拟用鼠标点击该按钮。

解题:

#include <boost/signal.hpp> 
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <boost\bind.hpp>
using namespace std;

class button
	:public boost::signals::trackable
{
public:
	button() {}
	void add_handler() const
	{
		cout << "add handle" << endl;
	}
	void remove_handler() const
	{
		cout << "remove handle" << endl;
	}
};

void main()
{
	auto_ptr<button> my_button(new button);
	boost::signal<void()> click;
	click.connect(boost::bind(&button::add_handler, my_button.get()));
	click.connect(boost::bind(&button::remove_handler, my_button.get()));
	click();
	system("pause");
}

利用智能指针管理对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值