C++类中如何在成员函数内调用存储的成员函数指针
C++类内调用成员函数指针的实现方法
成员函数指针和普通函数指针的调用逻辑不同:非静态成员函数执行时依赖对应的类实例(隐含this指针参数),所以调用成员函数指针时必须绑定具体的类实例对象,在类内部调用时绑定当前实例的this指针即可。
正确调用写法
你代码里的调用行修改为以下任意一种都可以:
- 原生写法(兼容所有C++标准):
(this->*fnPointer)(); - C++17及以上版本简化写法(需要引入
<functional>头文件):std::invoke(fnPointer, this);
修正后的完整示例代码
#include <functional> // 仅使用std::invoke时需要引入,原生写法不需要 class A { void (A::*fnPointer)() = nullptr; void callerMemberFunction(){ fnPointer = &A::someMemberFunction; // 存储成员函数指针 // 两种调用方式选一种即可 (this->*fnPointer)(); // std::invoke(fnPointer, this); // C++17及以上版本可用 } void someMemberFunction(){ // 自定义函数逻辑 } };
原理说明
成员函数指针本身只保存函数的入口地址,不会存储对应的类实例信息,所以调用时需要通过.*或者->*运算符绑定执行的实例对象,才能正确传递隐含的this指针完成调用。
内容的提问来源于stack exchange,提问作者pcfighter9537
相关产品推荐
相关产品推荐

