下面显示的是一个工作代码。但我想使用“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