Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过成员函数指针调用?_C++_Function Pointers - Fatal编程技术网

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

C++ 如何通过成员函数指针调用?,c++,function-pointers,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(); } 需要更多括号: (bigCat.*pc

我正在尝试使用成员函数指针进行一些测试。这个代码有什么问题?
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)();
^            ^

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

@AdrianCornish:Nope,但是
pcat
没有命名成员,它将指向在
main
中声明为局部变量的成员的指针命名。我想这有点像一个虚拟函数调用—是否存在一个好的用例/问题—正在努力思考如何使用它code@AdrianCornish:我从未实际使用过此功能,也没有在其他人编写的代码中使用过。肯定有人用过。。。但是用例很少。@AdrianCornish:这是一个很少使用的特性。我在泛型代码中经常使用它,例如,我有一组类似于_each
-的算法,它们接受一系列指针,并在每个指向的对象上调用一个成员函数。它使我不用使用难看的功能活页夹咒语。那是在lambda表达式使这变得容易之前。。。如果我要重写所有的代码,我可能会在大多数情况下使用lambdas。我发现自己在重构时使用了lambdas,我看到在成员函数调用前后重复相同的逻辑。它可以被重构成一个函数,该函数使用一个成员函数指针进行调用,因此前后逻辑只能编写一次。