在c++中,如何声明指向类中方法的函数指针
In C++, how do I declare a function pointer to a method in a class?
在c++中,我试图定义一个类型适合指针指向我的类cBar
的几个成员函数之一(所有函数都有相同的接口,说接受int
并返回void
)。
现在,我正在制作一个全局类型tHandler
,适合指向几个接受附加参数me
的全局函数之一的指针,持有指向我的类cBar
的指针,如下所示:
typedef void(*tHandler)(class cBar *const me, int val);
void Handler0(class cBar *const me, int val);
void Handler1(class cBar *const me, int val);
class cBar {
tHandler fCurrentHandler;
/*..*/
public:
inline void cBar::CurrentHandler(int val) {
(*fCurrentHandler)(this,val);
}
inline cBar() {
fCurrentHandler = Handler0;
CurrentHandler(0);
}
inline ~cBar() {
CurrentHandler(-1);
}
};
这是丑陋的;特别是Handler0
和Handler1
应该是cBar
的私有方法,tHandler
应该是私有类型。
什么线索吗?TIA。
指向成员的指针可以声明为
typedef void(Trustee::*tHandler)(int);
下面是如何使用它(改编自您自己的代码):
class Trustee {
typedef void(Trustee::*handler_t)(int);
handler_t pfCurrentHandler;
void handlerOne(int i) { cout << "HandlerOne: " << i << endl; }
void handlerTwo(int i) { cout << "HandlerTwo: " << i << endl; }
public:
void CurrentHandler(int val) {
(this->*pfCurrentHandler)(val);
}
Trustee() : pfCurrentHandler(&Trustee::handlerOne) {
CurrentHandler(0);
}
~Trustee() {
CurrentHandler(-1);
}
};
要特别注意operator ->*
,这不是你每天都能看到的。
查看效果
相关文章:
- 将一个类的方法指针存储到另一个类中
- 如何调用返回类方法指针的类方法
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?
- 泛型方法指针.reinterpret_cast指向不同类的方法指针,这是 UB 吗?
- C++;类方法指针;λ;将 lambda 作为成员函数指针传递;
- 使用模板、方法指针和字符串键入推导
- 将方法指针作为整数参数发送到C#的C 方法
- 从C 中的VTable获取方法指针
- 模板化方法指针 - 无法匹配函数参数的指针
- 获取特定的模板重载方法指针
- 如何将方法指针声明为Typedef方法参数
- 如何将方法指针类型转换为函数指针类型
- 如何在使用 pthreads 时将方法指针作为函数参数传递C++
- 方法指针映射,编译器说他们不接受任何参数
- C# 方法指针,如 C++ 中的指针
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- 尝试获取类方法指针时出现E_NOINTERFACE
- 传递和强制转换方法指针
- 常量方法指针的类型是什么
- 将对象的方法指针传递给接受 [静态方法指针/全局函数] 指针的函数