下面顯示的是一個工作代碼。但我想使用「this」關鍵字在我的實現中調用我的函數指針(例如在構造函數實現中)。請幫我想出一個解決方案。使用此關鍵字訪問C++中的函數指針
我的系統是 G ++(GCC)4.1.2 20080704(紅帽4.1.2-55)
工作守則
#include <iostream>
#include <string>
#include <map>
using namespace std;
class TestClass{
public:
typedef int (TestClass::*FunctionPtr)(int);
map <string, FunctionPtr> mFnPtrMap;
int Function1(int nAdd) { return nAdd + 1; }
int Function2(int nAdd) { return nAdd + 2; }
TestClass() {
mFnPtrMap.insert(make_pair("Function1", &TestClass::Function1));
mFnPtrMap.insert(make_pair("Function2", &TestClass::Function2));
}
int CallFunction(const string & s, int n) {
FunctionPtr fp = mFnPtrMap[s];
return (this->*fp)(n);
}
};
int main() {
TestClass ts;
cout << ts.CallFunction("Function1", 0) << endl;
cout << ts.CallFunction("Function2", 0) << endl;
}
我想要做的是:
我的期望是把它改成這樣的東西(用'this->'代替'TestClass ::')
mFnPtrMap.insert(make_pair("Function1", &this->Function1));
它給我一個編譯器錯誤。它甚至建議我使用TestClass :: name解析。
「ISO C++不允許取綁定的成員函數的地址,形成 一個成員函數指針。說&的TestClass ::功能1」
這是否意味着這是不可能的?如果有人可以給我一個解釋,這將有助於我理解下面的理論。謝謝。
你爲什麼要改用類名的呢?你看到了什麼優勢? – HeroicKatora
如果只是爲了避免顯式使用類名,我建議使用'decltype'和'std :: remove_pointer'來從'this'重建它。和C++ 11一樣,你可以使用下面這段代碼:std :: remove_pointer :: type'作爲顯式類名的直接替換 –
HeroicKatora
這不是獲得優勢。我想在代碼中給它一個非靜態的外觀,以適應我們所遵循的本地編碼標準。 – SajithP