boost.signals 学习

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

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

  2. sample code

#include <iostream>
#include <boost/signal.hpp>

typedef void (*ButtonEventHandler)(std::string);

void handler(std::string e)
{
	std::cout << e << std::endl;
}

class Button
{
public:
	Button(std::string s):name(s){}
	void add_handler(ButtonEventHandler handler){
		EventHandler.connect(handler);	
	}
	void remove_handler(ButtonEventHandler handler){
		EventHandler.disconnect(handler);	
	}
	void click(){
		EventHandler("clicked!");
	}
private:
	boost::signal<void (std::string)> EventHandler;
	std::string name;
};

int main(int argc,char **argv)
{
	Button button("button");
	button.add_handler(handler);
	button.click();
	button.remove_handler(handler);
	button.click();
	return 0;
}


你可能感兴趣的:(boost.signals)