多个用户可以对同一event进行register,也就是一对多的依赖关体系.
当"一"发生变化, 多个对此event感兴趣的user都将要有所行动.
应该是适用observer模式的场景了:
可以考虑以下方式:class Event{
private:
string type;
//other common info of event
//继承时可以添加更多的信息
}
class CallBack{
//包含一个被回调的函数,只有一个Event&类型的参数
}
template
class Dispatcher{//被监听者的父类
public:
map < string,T > listeners;
public:
void register(Event&,T&)const=0;
void dispatch(Event &);//发布事件,使所有绑定该事件的CallBack都调用某个函数(可以是普通函数也可以是重载了的()运算函数)
}
[ 本帖最后由 iptton 于 2008-4-11 11:46 编辑 ] 个人觉得为了调用和接口简单,CallBakc重载()比较好:class CallBack{
public:
void operator()(Event&)const = 0;
}以上observer实现方式来自Flash中actionscript3 QT的调用方法是:
QObject::connect(source, SIGNAL(clicked()),target, SLOT(quit()));
source是发送事件的对象,target是执行的对象
SIGNAL本质是字符串
SIGNAL和SLOT宏用于编译时把“信号”和"槽“链接起来
里面的具体细节就没有去追了...
不过觉得还是AS那种方式方便..
QT是以组合的方式把SIGNAL绑定在一起
而AS版本中source和event是完全没有依赖的。
class Source{
public:
SIGNAL ....//
}
[ 本帖最后由 iptton 于 2008-4-11 12:59 编辑 ] good.
再研究。。。
页:
1
[2]