理解C++實現委託原理

      在C#中有事件委託的概念,  我們可以方便的將一個類中的事件傳遞到另一個事件處理類中, 其實現的耦合性很底, 兩個類之間不需要實例關聯,  但在C++中並沒有這種內置的功能,  其實仔細想想, C#的這種事件委託機制是可以用C++的成員函數指針來實現的, 只需要加上一個中間類即可,  網上有個FastDelegate的開源庫就實現了這種委託機制, 有需要用到C++委託的朋友可以上網找找這個庫.  我們這裏只是簡單介紹下C++實現委託機制的原理, 也是參照了FastDelegate庫.

      前面說過, 要實現C++委託, 需要一箇中間類, 這個中間類是用來保存函數指針和例實例的, 因爲要實現通用性, 所以我們還需要用到C++模板技術, 定義的類如下:

     在這個中間類裏, 我們重載了()操作符來調用成員函數指針,  然後我們還需要一個函數來創建中間類:

 

     現在主要的代碼就完成了, 接下來我們看看調用方式:

      可以看出, 調用方式是非常簡單的,  另外, 對於帶參數的成員函數, 原理也是一樣的, 具體的可參照FastDelegate自己實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章