在C#中有事件委託的概念, 我們可以方便的將一個類中的事件傳遞到另一個事件處理類中, 其實現的耦合性很底, 兩個類之間不需要實例關聯, 但在C++中並沒有這種內置的功能, 其實仔細想想, C#的這種事件委託機制是可以用C++的成員函數指針來實現的, 只需要加上一個中間類即可, 網上有個FastDelegate的開源庫就實現了這種委託機制, 有需要用到C++委託的朋友可以上網找找這個庫. 我們這裏只是簡單介紹下C++實現委託機制的原理, 也是參照了FastDelegate庫.
前面說過, 要實現C++委託, 需要一箇中間類, 這個中間類是用來保存函數指針和例實例的, 因爲要實現通用性, 所以我們還需要用到C++模板技術, 定義的類如下:
在這個中間類裏, 我們重載了()操作符來調用成員函數指針, 然後我們還需要一個函數來創建中間類:
現在主要的代碼就完成了, 接下來我們看看調用方式:
可以看出, 調用方式是非常簡單的, 另外, 對於帶參數的成員函數, 原理也是一樣的, 具體的可參照FastDelegate自己實現