如何通过成员函数指针进行调用

How to call through a member function pointer?

本文关键字:调用 指针 函数 何通过 成员      更新时间:2023-10-16

我正在尝试对成员函数指针进行一些测试。这个代码出了什么问题?bigCat.*pcat();语句未编译。

class cat {
public:
   void walk() {
      printf("cat is walking n");
   }
};
int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}

需要更多的括号:

(bigCat.*pcat)();
^            ^

函数调用(())的优先级高于指向成员绑定运算符的指针(.*)。一元运算符的优先级高于二元运算符。

如今,规范的方法是使用std::invoke函数模板,尤其是在泛型代码中。请注意,成员函数指针位于第一位:

import <functional>;
std::invoke(pcat, bigCat);

您得到的是:几乎所有可调用的东西都有统一的调用语法。

开销:无。