繁体   English   中英

是否可以在C ++中创建指向非静态成员函数的指针?

[英]Is it possible to create a pointer to a non-static member-function in C++?

我想知道是否可以创建和使用指向非静态成员函数的指针。 当我在没有成员函数指针为静态的情况下编译代码时,会出现编译错误。

谢谢...

简而言之:是的,有可能,没有,它没有按照您的想法做。

关键事实是非静态成员函数不是函数(就像花旗松不是冷杉)。 它们是成员函数,而有所不同。 它们只能在给定的对象实例上调用。

因此,为了调用给定实例X a;的成员函数X::foo() X a; ,即执行调用a.foo() ,既需要使用X::foo() ,又需要在实例a上调用它a 前者由指针到成员函数提供 ,后者不是指针 ,后者由实例指针或引用提供:

struct X { int foo(bool, char); };  // class definition

X a;          // an instance
X * p = &a;   // just for demonstration

int (X::*)(bool, char) ptmf = &X::foo;   // pointer-to-member-function

现在调用:

(a.*ptmf)(false, 'a');
(p->*ptmp)(true, 'z');

简而言之: foo本身不能让您调用任何东西。 可调用实体是 (&X::foo, a) ,可让您调用a.foo()

是的,可以在C ++中创建指向成员函数的指针。 查看此常见问题解答: 指向成员的指针

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM