You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:36:08