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,我看到在成员函数调用前后重复相同的逻辑。它可以被重构成一个函数,该函数使用一个成员函数指针进行调用,因此前后逻辑只能编写一次。