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 ?
}在上面的测试代码中,pf是B的数据成员。调用它的语法规则是什么?这应该是直接前进,但我没有得到一个适当的匹配。例如,如果我尝试obj.*pf(0,0);,那么我得到:
error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘pf (...)’, e.g. ‘(... ->* pf) (...)’发布于 2011-06-11 15:33:00
如下所示:
(obj.*obj.pf)(0, 1);成员访问(.)比指向成员运算符的指针具有更高的优先级,因此这相当于:
(obj.*(obj.pf))(0, 1);因为函数调用的优先级也高于指向成员运算符的指针,所以不能:
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发布于 2011-06-11 15:33:42
pf是一个方法指针,您希望调用它所指向的方法,所以您必须使用
(obj.*obj.pf)(1, 2);它表示调用pf指向的方法的对象obj。
见这里的结果:
http://ideone.com/p3a5G
发布于 2011-06-11 15:36:28
语法是非常不自然的,但是C++优先规则的结果是.
(obj.*obj.pf)(1, 2);https://stackoverflow.com/questions/6316751
复制相似问题