C++98环境下如何通过类成员函数指针数组正确调用类方法
问题说明与解决方法
报错原因
你遇到的报错是因为C++的非静态成员函数指针和普通函数指针的调用规则不同:
- C语言不存在成员函数的概念,你写的
(*f[i])()是普通函数指针的调用语法,在C场景下合法 - C++的非静态成员函数调用隐式依赖this指针,调用成员函数指针时必须明确绑定对应的类实例,需要使用
.*(针对实例对象)或->*(针对实例指针)运算符,不能直接解引用调用。
解决方案
你现在是在Dummy类的caller成员函数内部,直接用当前实例的this指针绑定成员函数指针即可,该语法完全符合C++98标准。
修正后的class.cpp代码如下:
void Dummy::caller( std::string id ) { void (Dummy::*f[4])() = {&Dummy::f1, &Dummy::f2, &Dummy::f3, &Dummy::f4}; std::string v[4] = {"f1", "f2", "f3", "f4"}; for (int i = 0; i < 4; i++) { if (id == v[i]) { // 用this指针绑定成员函数指针,使用->*运算符调用 (this->*f[i])(); break; } } }
如果是在类外部调用成员函数指针,写法为实例名.*函数指针名(),比如你声明了Dummy d;,对应调用语法就是(d.*f[0])();。
内容的提问来源于stack exchange,提问作者sickl_
相关产品推荐
相关产品推荐

