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

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

本文关键字:一个 静态成员 指针 函数 C++ 创建 是否      更新时间:2023-10-16

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

谢谢。。。

简而言之:是的,这是可能的,不,它不会按照你的想法去做。

关键的事实是,非静态成员函数不是函数(就像道格拉斯冷杉不是冷杉一样)。它们是成员函数,这是不同的。它们只能在给定的对象实例上调用。

因此,为了调用给定实例X a;的成员函数X::foo(),即执行调用a.foo(),您需要既要使用X::foo()又要在实例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++中创建指向成员函数的指针。请参阅以下常见问题解答:指向成员的指针

相关文章: