繁体   English   中英

当它是 class 数据成员时,如何调用指向成员 function 的指针?

[英]How to invoke pointer to member function when it's a class data member?

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); 然后我得到:

error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘pf (...)’, e.g. ‘(... ->* pf) (...)’

像这样:

(obj.*obj.pf)(0, 1);

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

(obj.*(obj.pf))(0, 1);

因为 function 调用也比指向成员运算符的指针具有更高的优先级,所以你不能这样做:

obj.*obj.pf(0, 1) /* or */ obj.*(obj.pf)(0, 1)

因为这相当于:

obj.*(obj.pf(0, 1)) // grammar expects obj.pf to be a callable returning a
                    // pointer to member

pf 是一个方法指针,你要调用它指向的方法,所以你必须使用

(obj.*obj.pf)(1, 2);

它说 object obj 您调用 pf 指向的方法

在这里查看结果:

http://ideone.com/p3a5G

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

(obj.*obj.pf)(1, 2);

暂无
暂无

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

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