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

如何声明类成员函数指针的等价类型别名?

指向类成员函数指针的类型别名写法

针对非静态类成员函数的指针,类型别名的写法需要明确绑定所属的类类型,语法和普通函数指针存在差异:

// 假设目标类为 MyClass,成员函数返回 void,参数为(int, int)
using MemFunc = void (MyClass::*)(int, int);

和普通函数指针using func = void (*)(int, int)的核心区别在于:成员函数指针用(类名::*)替代了普通指针的(*)——这是因为非静态成员函数必须依赖类的实例才能调用,指针需要关联对应的类类型。

举个完整的使用示例:

class MyClass {
public:
    void bar(int x, int y) {
        // 函数实现
    }
};

// 定义成员函数指针的类型别名
using MemFunc = void (MyClass::*)(int, int);

int main() {
    // 声明并赋值成员函数指针
    MemFunc func_ptr = &MyClass::bar;
    
    // 通过类实例调用成员函数
    MyClass obj;
    (obj.*func_ptr)(10, 20);
    return 0;
}

如果是静态类成员函数,由于它不依赖类实例,其指针本质和普通函数指针一致,直接用普通函数指针的别名写法即可:

class MyClass {
public:
    static void static_bar(int x, int y) {
        // 静态函数实现
    }
};

using StaticMemFunc = void (*)(int, int);
StaticMemFunc static_func_ptr = &MyClass::static_bar;

内容的提问来源于stack exchange,提问作者El tornillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:25:13