C++实现委托与事件代理

                                          C++实现委托与事件代理

       写在前面的话:这里主要会涉及到vectorreinterpret_cast类型转换运算符、指针成员、事件函数、代理模式,模版编程……等知识,最好有一定了解才往下看,最好就是研究过Don Clugston写的FastDelegate委托,跟C#的委托很相似,当然,大神们写的代码都是很难懂的,没有一定基础和知识,研究起来会非常吃力,我就是研究了两天两夜,才研究出那么一点点东西!我会尽力写的浅显易懂!!

       C++事件代理,是从C++的委托演变而来的,大家都知道消息都是以事件触发而驱动的,当一件事情发生的时候,要把消息传给在监听的对象,然后对象再执行相应的行为。

       那什么是代理呢?看过Thinking in C++的都知道,有个叫代理模式的东西,简单的说,代理是一个中介,一个传递消息的中介,你只要把消息的状态传过来,然后再将这个消息发往你指定的对象。生活中有很多这样的例子,比如淘宝,你上网买一本Thinking in C++,然后付了钱,你认为淘宝会很开心地帮你把这本书打印出来?淘宝才没你想的这么乖,它只是找到那个店家,然后通知它,有人需要一本Thinking in C++,然后告诉它你的地址,没过几天它就会书送到你手上了。

       这是很常见的例子,那它怎么用到编程里来呢?先来问几个问题,比如你在玩一个游戏,当你按下了键盘的”K”键,嗯……这里面发生了很多事情,你放出了一个很华丽的技能,你的技能经验增加了,你的攻击力增加了100……那怎么来完成这个效果呢?很自然我们会想到

       if(KeyDow(‘k’))

{

       TriggerSkill();  

SkillExpUp();

       AttackPowerUP();

}

这样想很自然,没什么不好的!确实!但是问题来了,如果中途我想多加一些效果,比如说我要看一下是否击中了怪物,那怎么办?嗯!也很自然的,我们会想到下面的代码。

       if(KeyDow(‘k’))

{

       TriggerSkill();  

SkillExpUp();

       AttackPowerUP();

       IsHitMonster();

}

这也很自然,没什么好说的,但是我想要触发更多的效果,那怎么办,找到那个if,然后在那里添加代码?如果我想把这效果放后一点再触发,那怎么办,把这段代码剪切,然后放到我们想要的位置?越到后面,我们越发现,这样好麻烦,而且非常不灵活,如果我们想这整个效果放到其他地方执行,会发现很麻烦,也许你会想,把它封装成一个函数,那不就行啦!如果你也想按下”J”触发一些跟’’K”不同的事件,嗯……那你怎么办,再把它封装一个函数吧,如果你有十几个键需要触发一些不同的东西,那得怎么办……十几个函数?也许你能够忍受存在这多个类似的函数&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值