最早以前.就說要好好研究一下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......哈哈
變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~