我有一个场景,如下代码。我试图
将一个C++成员函数的地址存储在一个函数指针的向量中。
使用这个函数指针向量访问一个C++成员函数。
我能够添加函数,但我不能调用它们。我得到的错误是
错误:必须使用'.'或'->'来调用指向成员函数的指针。
class allFuncs {
private:
std::vector<void *(allFuncs::*)(int)> fp_list; // Vector of function pointers
void func_1(int a) {
// some code
}
void func_2(int a) {
// some code
}
void func_3() {
// STORING THE FUNCTION POINTER INTO The VECTOR OF FUNCTION POINTERS
fp_list.push_back(&func_2);
fp_list.push_back(allFuncs::func_1);
}
func_4() {
// Calling the function through the function pointer in vector
this->*fp_list.at(0)(100); // this does not work
}
}
你需要使用
(this->*fp_list.at(0))(100)
来调用向量中的函数。 当你执行
this->*fp_list.at(0)(100)
函数调用(该 (100)
部分)必然是 fp_list.at(0)
所以基本上你有
this->*(fp_list.at(0)(100))
这将无法工作。在函数指针访问的周围加上括号就可以解决这个问题。this->*fp_list.at(0)
成为要调用的函数,然后是 (100)
在该函数上使用。