最早以前.就说要好好研究一下Loki库..一直都忘记..要么就有事.刚好这几天要写一个事件ID与事件处理函数的绑订机制.就想起来Loki的functor来了...花了两天时间仔细研究了下loki中的几个实现.全部明白不敢说..不过确实明白了..这种思路..在这里也要多谢权哥...呵呵
我是从具体的现实思路出发.来研究loki的..我的实现目地.是可以便捷的绑订事件ID与事件处理函数,在回调事件处理函数时.不会有以前使用函数地址注册时所产生的问题,比如.回调的函数中无法正常使用函数所归属类的信息.无法绑订同一类不同对象的实现方法
首先先来研究..实现思路应该是一样的..同样是绑订函数地址.这点.loki的functor以前帮我做好了.剩下的.只是如何能更好的使用
loki 的一个functor只能绑订一个函数,
思路是,预先申请一个足够大的functor数组,将每个申请的functor存入这个数组中,以数组的下标做为处理函数的ID;
解决了回调函数的问题,然后就是事件ID了.这个有点郁闷.实现思路有点绕.
首先事件ID肯定是声明了的.然后利用声明的事件ID自动生成相应的事件结构体,则于事件回调不需要变动参数,所以
所有结构体都派生自同一基体,然后就通过事件结构体中的事件ID来进行绑订,这样可以确订声明的处理方法必须隶属于
某一个对应的事件ID,这点在回调注册时也可以保证,默认要注册两个ID.用于判定当前ID是否超过以声明的范围 ,EventBegin EventEnd;
解决了事件ID之后..就是它们之前的绑订了.这个简单.在声明进.先传入事件结构体,再传入用同样事件结构体声明的回调函数,然后将回调函数
放入相对应以事件ID做为下标的数组中.搞定
最后还有一个消息分派的问题,这个地方有很多做法,,,暂时我先用最简单
由外界传入一个触发的事件ID,然后判定 这个ID是否合法,然后回调对应下标的functor...这样..就回调了相应的处理函数了,参数这里
做的最简单化处理,只是声明了一个结构体,然后.将事件ID赋值,然后把结构体传入回调函数,以后有需要的话..此结构体可由外界传入
相应的值由外界传入,不过..一个事件回调....貌似没有这种要求
呵呵..总之对于模板编程,有了一个比较清晰的了解..最大的收获就是,看着满篇的模板,四处乱飞的typename typedef class..不再头晕了...呵呵
在这个过程中..还研究了..单件模式,智能指针,抽象化工厂,呵呵..收获非常大..也感觉自己以前的实现太不优雅了...以后要往优雅方向努力啦
Loki的单件模式非常Happy.....以后决定..彻底忘记自己 写的单件...看都不看....专心用loki的.....还有智能指针..不过智能指针有个不爽的地方
..也不是不爽..只是我感觉失落....为啥呢...因为智能指针无法控制它什么时候释放.......它自己会释放..这样虽然..安全都有保证,用着也开心....
不过....忽然不用我释放了...总是觉得心里少点啥.........想delete......哈哈
变高手~~~~~变高手~~~~~变高手~~~~~变高手~~~~~变高手~~~~~变高手~~~~~变高手~~~~~变高手~~~~~