2012-02-27 25 views
1

以下の例では、クラス何とかのメンバ関数への関数ポインタを使用します。関数ポインタの構文はわかります。しかし、呼び出すときに私はthis->*funcPtrのまわりに括弧を入れなければなりませんでした。なぜこれが必要なのかわかりません。私はそれがC++が表現を評価する方法に関連していると思います。使用されるコンパイラは、関数呼び出し演算子()は「ポインタメンバーに」演算子->*よりも高い優先湯順位を取るVS 2008C++構文を使用してメンバ関数を呼び出すだ関数ポインタ

#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

+1

[OK]を、多分マクロが良いでしょう。しかし、それでも私の質問には答えません。私は理由を知りたいと思っています。 – Nils

+0

そして、どのようにして可変長マクロを使用して引数を取る関数へのポインタ用のマクロを定義しますか? – Nils

答えて

2

です。

here、例えば、参照してください。

+0

これは非常にシンプルです。 – Nils

関連する問題