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

Nay*_*iya 56 c++ function-pointers

我正在尝试使用成员函数指针进行一些测试.这段代码有什么问题?该bigCat.*pcat();声明无法编译.

class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 92

需要更多括号:

(bigCat.*pcat)();
^            ^
Run Code Online (Sandbox Code Playgroud)

函数call(())的优先级高于指向成员的绑定操作符(.*).一元运算符的优先级高于二元运算符.

  • @AdrianCornish:是的. (3认同)

neo*_*nxc 19

如今,规范的方法是使用std::invoke函数模板,尤其是在通用代码中。请注意,成员函数指针首先出现:

import <functional>;

std::invoke(pcat, bigCat);
Run Code Online (Sandbox Code Playgroud)

您将得到什么:几乎任何可调用的统一调用语法。

开销:无。

  • 警告:需要 C++17(当然问题越来越少) (2认同)