最早以前.就說(shuō)要好好研究一下Loki庫(kù)..一直都忘記..要么就有事.剛好這幾天要寫(xiě)一個(gè)事件ID與事件處理函數(shù)的綁訂機(jī)制.就想起來(lái)Loki的functor來(lái)了...花了兩天時(shí)間仔細(xì)研究了下loki中的幾個(gè)實(shí)現(xiàn).全部明白不敢說(shuō)..不過(guò)確實(shí)明白了..這種思路..在這里也要多謝權(quán)哥...呵呵
我是從具體的現(xiàn)實(shí)思路出發(fā).來(lái)研究loki的..我的實(shí)現(xiàn)目地.是可以便捷的綁訂事件ID與事件處理函數(shù),在回調(diào)事件處理函數(shù)時(shí).不會(huì)有以前使用函數(shù)地址注冊(cè)時(shí)所產(chǎn)生的問(wèn)題,比如.回調(diào)的函數(shù)中無(wú)法正常使用函數(shù)所歸屬類(lèi)的信息.無(wú)法綁訂同一類(lèi)不同對(duì)象的實(shí)現(xiàn)方法
首先先來(lái)研究..實(shí)現(xiàn)思路應(yīng)該是一樣的..同樣是綁訂函數(shù)地址.這點(diǎn).loki的functor以前幫我做好了.剩下的.只是如何能更好的使用
loki 的一個(gè)functor只能綁訂一個(gè)函數(shù),
思路是,預(yù)先申請(qǐng)一個(gè)足夠大的functor數(shù)組,將每個(gè)申請(qǐng)的functor存入這個(gè)數(shù)組中,以數(shù)組的下標(biāo)做為處理函數(shù)的ID;
解決了回調(diào)函數(shù)的問(wèn)題,然后就是事件ID了.這個(gè)有點(diǎn)郁悶.實(shí)現(xiàn)思路有點(diǎn)繞.
首先事件ID肯定是聲明了的.然后利用聲明的事件ID自動(dòng)生成相應(yīng)的事件結(jié)構(gòu)體,則于事件回調(diào)不需要變動(dòng)參數(shù),所以
所有結(jié)構(gòu)體都派生自同一基體,然后就通過(guò)事件結(jié)構(gòu)體中的事件ID來(lái)進(jìn)行綁訂,這樣可以確訂聲明的處理方法必須隸屬于
某一個(gè)對(duì)應(yīng)的事件ID,這點(diǎn)在回調(diào)注冊(cè)時(shí)也可以保證,默認(rèn)要注冊(cè)兩個(gè)ID.用于判定當(dāng)前ID是否超過(guò)以聲明的范圍 ,EventBegin EventEnd;
解決了事件ID之后..就是它們之前的綁訂了.這個(gè)簡(jiǎn)單.在聲明進(jìn).先傳入事件結(jié)構(gòu)體,再傳入用同樣事件結(jié)構(gòu)體聲明的回調(diào)函數(shù),然后將回調(diào)函數(shù)
放入相對(duì)應(yīng)以事件ID做為下標(biāo)的數(shù)組中.搞定
最后還有一個(gè)消息分派的問(wèn)題,這個(gè)地方有很多做法,,,暫時(shí)我先用最簡(jiǎn)單
由外界傳入一個(gè)觸發(fā)的事件ID,然后判定 這個(gè)ID是否合法,然后回調(diào)對(duì)應(yīng)下標(biāo)的functor...這樣..就回調(diào)了相應(yīng)的處理函數(shù)了,參數(shù)這里
做的最簡(jiǎn)單化處理,只是聲明了一個(gè)結(jié)構(gòu)體,然后.將事件ID賦值,然后把結(jié)構(gòu)體傳入回調(diào)函數(shù),以后有需要的話(huà)..此結(jié)構(gòu)體可由外界傳入
相應(yīng)的值由外界傳入,不過(guò)..一個(gè)事件回調(diào)....貌似沒(méi)有這種要求
呵呵..總之對(duì)于模板編程,有了一個(gè)比較清晰的了解..最大的收獲就是,看著滿(mǎn)篇的模板,四處亂飛的typename typedef class..不再頭暈了...呵呵
在這個(gè)過(guò)程中..還研究了..單件模式,智能指針,抽象化工廠,呵呵..收獲非常大..也感覺(jué)自己以前的實(shí)現(xiàn)太不優(yōu)雅了...以后要往優(yōu)雅方向努力啦
Loki的單件模式非常Happy.....以后決定..徹底忘記自己 寫(xiě)的單件...看都不看....專(zhuān)心用loki的.....還有智能指針..不過(guò)智能指針有個(gè)不爽的地方
..也不是不爽..只是我感覺(jué)失落....為啥呢...因?yàn)橹悄苤羔槦o(wú)法控制它什么時(shí)候釋放.......它自己會(huì)釋放..這樣雖然..安全都有保證,用著也開(kāi)心....
不過(guò)....忽然不用我釋放了...總是覺(jué)得心里少點(diǎn)啥.........想delete......哈哈
變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~