尝试调用成员函数指针不起作用
Trying to call a member function pointer won't work
我知道成员函数指针有点棘手,如果函数指针不是类本身的成员,我可以调用它,但如果它是类的成员,我似乎无法调用它:
struct Window
{
virtual void handleEvent() {};
void (Window::*pHandleEvent)();
};
int main()
{
Window w;
void (Window::*fnptr)() = &Window::handleEvent;
(w.*fnptr)(); // Works fine calling a local func ptr
w.pHandleEvent(); // Calling its own member pointer doesn't work
// Err: Expression preceding parentheses of apparent call must have
// (pointer-to) function type
(w.*pHandleEvent)(); // Doesn't work
//Err: identifier "pHandleEvent" is undefined
(w.*Window::pHandleEvent)(); // Doesn't work.
// Err: A non-static member reference must be relative to a specific object.
}
您需要
指定两个Window
对象:一个是其指针使用的对象,另一个是调用方法的对象。 如果它们是相同的,那就是
(w.*w.pHandleEvent)();
请注意优先级:如果您相反地具有A Window::*ptm;
并且想要A
对象的成员,则它是(w.*ptm).a_member
。
使用 C++17,您可以依靠 std::invoke
来满足所有指向会员需求的指针:
std::invoke(w.pHandleEvent, w);
第一个参数是指向成员的指针,第二个参数是对象或指向对象的指针。所有的语法业务都为您处理。
相关文章:
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 指向类中函数方法的指针不起作用
- 在 c++ 中返回矢量的指针不起作用
- 班上的Arduino步进电动机指针不起作用
- 功能指针不起作用(C )
- 投射时共享指针不起作用?
- 指向结构的指针不起作用
- 指针不起作用,返回地址不是值
- 尝试调用成员函数指针不起作用
- 矩阵乘法中的指针不起作用
- 指针不起作用
- 为什么交换2d数组指针不起作用
- 指向函数的指针不起作用
- 为什么使用本地指针不起作用
- C++ 我的字符串类:指针不起作用
- 递增指针不起作用
- 放置指向shared_ptr的多重映射的指针不起作用
- 使用正则表达式和 sed 命令替换C++代码中的' *'指针不起作用
- 对象指针不起作用
- 数据结构 - C++指针不起作用