工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
楼主: hjack

[讨论]callback 函数问题

[复制链接]
发表于 2008-4-11 11:12 | 显示全部楼层
 大部分看不懂
回复

使用道具 举报

发表于 2008-4-11 11:45 | 显示全部楼层
原帖由 hjack 于 2008-4-11 01:46 发表
多个用户可以对同一event进行register,也就是一对多的依赖关体系.
当"一"发生变化, 多个对此event感兴趣的user都将要有所行动.


应该是适用observer模式的场景了:
可以考虑以下方式:
  1. class Event{
  2.    private:
  3.      string type;
  4.      //other common info of event
  5.      //继承时可以添加更多的信息
  6. }
  7. class CallBack{
  8.    //包含一个被回调的函数,只有一个Event&类型的参数
  9. }
  10. template
  11. class Dispatcher{//被监听者的父类
  12.   public:
  13.       map < string,T > listeners;
  14.   public:
  15.       void register(Event&,T&)const=0;
  16.       void dispatch(Event &);//发布事件,使所有绑定该事件的CallBack都调用某个函数(可以是普通函数也可以是重载了的()运算函数)
  17. }
复制代码

[ 本帖最后由 iptton 于 2008-4-11 11:46 编辑 ]
回复

使用道具 举报

发表于 2008-4-11 11:49 | 显示全部楼层
个人觉得为了调用和接口简单,CallBakc重载()比较好:
  1. class CallBack{
  2.     public:
  3.        void operator()(Event&)const = 0;
  4. }
复制代码
以上observer实现方式来自Flash中actionscript3
回复

使用道具 举报

发表于 2008-4-11 12:57 | 显示全部楼层
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 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-4-11 18:33 | 显示全部楼层
good.
再研究。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 11:41

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表