?? 編程技巧 使用一個模板類實現對于類成員函數的回調執行(編譯自topica).txt
字號:
作者:rick1126
email: rickzhang@sina.com
日期:2001-4-13 9:23:39
A GENERIC CALLBACK DISPATCHER
可以創建一個通用的回調模板類進行成員函數的自動回調. 這樣的一個模板將將類作為其成員函數的第一個參數, 第二個參數是一個指向類成員函數的指針. 關鍵在于將第二個參數基于第一個參數如下:
template < class T, void (T::*F)() > class callback {/**/};
該模板的實現十分簡單: 它具備一個針對T的引用, 就是所需調用的成員函數的宿主類, 一個跟在其和一個稱之為execute()的成員函數.:
template < class T, void (T::*F)() >
class callback
{
public:
callback(T& t) : object(t) {}/*assign actual object to T*/
void execute() {(object.*F)();}/*launch callback function*/
private:
T& object;
};
要通過一個成員指針調用成員函數, 你必須具有一個針對確定的對象的引用. 這就是為什么模板需要一個 T& 作為成員變量. 現在你需要使用回調模板來執行一個類 A 的成員函數:
class A
{
public:
void f();
};
你不能使用變量操作成員函數地址, 為此使用 & 操作來獲得函數地址. 最后, 傳遞該成員函數的數組對象給模板對象.:
int main()
{
A a; /*first, create an object*/
callback < A, &A::f > c(a); /*instantiate template*/
c.execute(); /*invoke a.f()*/
}
你可以使用回調模板類結合任意類型的類, 只要其成員函數具有同樣的形式.
-----------
Danny Kalev
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -