69

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

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

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
4

2 回答 2

119

需要更多括号:

(bigCat.*pcat)();
^            ^

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

于 2012-08-30T02:26:10.903 回答
8

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

import <functional>;

std::invoke(pcat, bigCat);

你得到什么:几乎任何东西的统一调用语法,这是可调用的。

开销:无。

于 2021-10-13T19:44:55.297 回答