sigslot地址:http://sigslot.sourceforge.net/
简介:主要实现sig/slot模式的C++框架,实现组件之间松耦合。
原理介绍:
class Switch {
public:
virtual void clicked() = 0;
};
class Light() {
public:
void turnOn();
void turnOff();
void ToggledState();
};
/**现在假设将Switch关联绑定到Light,通过click转换Light的状态,但不能修改Switch和Light接口
* 通常的实现为 **/
public ToggledSwitch : public Switch {
public:
ToggledSwitch(Light &l) {
lg_ = l;
}
vitual void clicked() {
lg_.toggledState();
}
private:
Light& lg_;
};
/** 信号和槽机制使得设计类的时候不用太多考虑如何与其他类之间如何连接;**/
/** 下面是使用sigslot框架后的代码 **/
class Switch {
public:
signal0<> Clicked;
};
class Light : class sigslot::has_slots<> {
public:
void turnOn();
void turnOff();
void ToggledState();
};
Switch sw1, sw2;
Light lg1, lg2;
sw1.Clicked.connect(&lg1, Light::ToggledState);
sw2.Clicked.connect(&lg2, Light::ToggledState);
// 省去了实现Switch