首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在成员函数是类数据成员时调用指针?

如何在成员函数是类数据成员时调用指针?
EN

Stack Overflow用户
提问于 2011-06-11 15:28:01
回答 3查看 6.3K关注 0票数 11
代码语言:javascript
复制
struct B
{
  void (B::*pf)(int, int);  // data member
  B () : pf(&B::foo) {}
  void foo (int i, int j) { cout<<"foo(int, int)\n"; } // target method
};

int main ()
{
  B obj;
  // how to call foo() using obj.pf ?
}

在上面的测试代码中,pfB的数据成员。调用它的语法规则是什么?这应该是直接前进,但我没有得到一个适当的匹配。例如,如果我尝试obj.*pf(0,0);,那么我得到:

代码语言:javascript
复制
error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘pf (...)’, e.g. ‘(... ->* pf) (...)’
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-11 15:33:00

如下所示:

代码语言:javascript
复制
(obj.*obj.pf)(0, 1);

成员访问(.)比指向成员运算符的指针具有更高的优先级,因此这相当于:

代码语言:javascript
复制
(obj.*(obj.pf))(0, 1);

因为函数调用的优先级也高于指向成员运算符的指针,所以不能:

代码语言:javascript
复制
obj.*obj.pf(0, 1) /* or */ obj.*(obj.pf)(0, 1)

因为这相当于:

代码语言:javascript
复制
obj.*(obj.pf(0, 1)) // grammar expects obj.pf to be a callable returning a
                    // pointer to member
票数 14
EN

Stack Overflow用户

发布于 2011-06-11 15:33:42

pf是一个方法指针,您希望调用它所指向的方法,所以您必须使用

代码语言:javascript
复制
(obj.*obj.pf)(1, 2);

它表示调用pf指向的方法的对象obj。

见这里的结果:

http://ideone.com/p3a5G

票数 5
EN

Stack Overflow用户

发布于 2011-06-11 15:36:28

语法是非常不自然的,但是C++优先规则的结果是.

代码语言:javascript
复制
(obj.*obj.pf)(1, 2);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6316751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档