如何解决当它是类数据成员时,如何调用指向成员函数的指针?
|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 ?
}
在上面的测试代码中,“ 1”是“ 2”的数据成员。调用它的语法规则是什么?应该是直截了当的,但是我没有找到合适的比赛。例如如果我尝试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);
由于函数调用的优先级也比成员运算符的指针高,因此您不能执行以下操作:
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);
它表示您调用pf指向的方法的对象obj
在这里查看结果:
http://ideone.com/p3a5G
, 语法非常不自然,但是是C ++优先规则的结果...
(obj.*obj.pf)(1,2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。