如何声明类成员函数指针的等价类型别名?
指向类成员函数指针的类型别名写法
针对非静态类成员函数的指针,类型别名的写法需要明确绑定所属的类类型,语法和普通函数指针存在差异:
// 假设目标类为 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
相关产品推荐
相关产品推荐

