2012-02-27 78 views
1

下面的示例使用函數指針指向類Blah的成員函數。函數指針的語法對我來說很清楚。然而,當打電話時,我不得不在this->*funcPtr左右放置括號,我不確定爲什麼這是必需的。我想這與C++如何評估表達式有關。所使用的編譯器是VS 2008使用它的函數指針調用成員函數的C++語法

#include <iostream> 

using namespace std; 

struct Blah { 

    void myMethod(int i, int k) { 
     cout << "Hi from myMethod. Arguments: " << i << " " << k << endl; 
    } 

    typedef void (Blah::*blahFuncPtr)(int, int); 

    void travelSomething(blahFuncPtr funcPtr) { 
     (this->*funcPtr)(1, 2); 
     // w/o the brackets I get C2064 in VS 2008 
     // this->*funcPtr(1, 2); 
    } 
}; 

int main() { 
    Blah blah; 
    blah.travelSomething(&Blah::myMethod); 
    cin.get(); 
    return 0; 
} 
+1

http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.6 – Mat 2012-02-27 06:54:03

+1

好的,也許一個宏是一個好主意。但是這仍然不能回答我的問題。我想知道爲什麼.. – Nils 2012-02-27 06:56:05

+0

呃以及如何定義一個指向函數的指針宏,例如使用可變宏來引用參數? – Nils 2012-02-27 07:06:35

回答

2

的函數調用操作()需要優先級數字比「指針構件」操作符->*

例如參見here

+0

呃這很簡單,thx的答案。 – Nils 2012-02-27 07:02:41