2016-10-14 30 views
2

我正在刷新一些被遺忘的關於指向函數的指針的概念,以創建某種包裝類來處理回調調用。關於此代碼的含義

在谷歌衝浪後,我發現這個簡單而有趣的帖子 http://blog.coldflake.com/posts/C++-delegates-on-steroids/

到目前爲止,我瞭解幾乎所有的東西,除了這

T::*TMethod 

我能記得的:: *的含義,你可以看到,在這篇文章的很多部分,這裏是作者第一次使用它

class Delegate 
{ 
    typedef void (*Type)(void* callee, int); 
public: 
    Delegate(void* callee, Type function) 
     : fpCallee(callee) 
     , fpCallbackFunction(function) {} 
    template <class T, void (T::*TMethod)(int)> <<<<<<First time 
    static Delegate from_function(T* callee) 
    { 
     Delegate d(callee, &methodCaller<T, TMethod>); 
     return d; 
    } 
    void operator()(int x) const 
    { 
     return (*fpCallbackFunction)(fpCallee, x); 
    } 
private: 
    void* fpCallee; 
    Type fpCallbackFunction; 
    template <class T, void (T::*TMethod)(int)> 
    static void methodCaller(void* callee, int x) 
    { 
     T* p = static_cast<T*>(callee); 
     return (p->*TMethod)(x); 
    } 
}; 

到目前爲止,我沒有理解德爾的概念,但我不記得的意思:: *

我知道,propablythisisavery基本和愚蠢的問題,所以請好。

此致

+0

這是一個成員函數指針 –

回答

2

它的一個函數指針T類的成員函數。

簡單的例子:

class A { 
    int func() { return 1; } 
public: 
    int (A::*pf)(); 

    A() : pf(&A::func) {} 
}; 

int main() { 
    A obj; 
    std::cout << (obj.*obj.pf)(); 
    return 0; 
} 
+0

嗨,大家好,感謝您的回答,我讀的建議後回顧一些概念,再次感謝您的幫助 – Trungus