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;
}
http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.6 – Mat 2012-02-27 06:54:03
好的,也許一個宏是一個好主意。但是這仍然不能回答我的問題。我想知道爲什麼.. – Nils 2012-02-27 06:56:05
呃以及如何定義一個指向函數的指針宏,例如使用可變宏來引用參數? – Nils 2012-02-27 07:06:35