1.概要
// 使用 typedef 定义一个指向成员函数的指针类型
typedef void (MyClass::*MyFunctionPtr)();
2.内容
在C++中,typedef
通常用于为已有的类型定义一个新的名字,而不是用来定义一个类的函数。不过,你可以在类定义中使用typedef
来为类成员函数的指针类型定义一个新的名字,这在某些需要函数指针作为回调或事件处理机制的情况下非常有用。
下面是一个例子,展示如何在类中使用typedef
来定义一个成员函数指针类型:
#include <iostream>
class MyClass {
public:
// 定义一个成员函数
void MyFunction() {
std::cout << "MyFunction called" << std::endl;
}
// 使用 typedef 定义一个指向成员函数的指针类型
typedef void (MyClass::*MyFunctionPtr)();
// 设置一个成员函数指针
void SetFunctionPointer(MyFunctionPtr ptr) {
funcPtr = ptr;
}
// 调用通过指针设置的成员函数
void CallFunctionPointer() {
if (funcPtr) {
(this->*funcPtr)();
}
}
private:
// 成员函数指针
MyFunctionPtr funcPtr = nullptr;
};
int main() {
MyClass obj;
// 设置函数指针指向 MyFunction
obj.SetFunctionPointer(&MyClass::MyFunction);
// 调用函数指针指向的函数
obj.CallFunctionPointer();
return 0;
}
在这个例子中:
MyClass
类中有一个成员函数MyFunction
。- 使用
typedef
定义了一个新的类型MyFunctionPtr
,它表示一个指向MyClass
的成员函数的指针,这些成员函数没有参数且返回类型为void
。 - 类中有一个成员函数
SetFunctionPointer
,它接受一个MyFunctionPtr
类型的参数,并将其保存在funcPtr
成员变量中。 - 类中还有一个成员函数
CallFunctionPointer
,它通过成员函数指针调用所指向的成员函数。
这样,你就可以使用typedef
来简化成员函数指针的声明和使用。