C++ 如何调用指向成员函数的指针,当它';谁是班级数据员?
像这样:C++ 如何调用指向成员函数的指针,当它';谁是班级数据员?,c++,member-function-pointers,member-variables,C++,Member Function Pointers,Member Variables,像这样: 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) /* or */ obj.*(obj.pf)(0, 1) 因为函数调用的优先级也高于指向成员运算符的指针,所以不能执行以
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) /* or */ obj.*(obj.pf)(0, 1)
因为函数调用的优先级也高于指向成员运算符的指针,所以不能执行以下操作:
(obj.*(obj.pf))(0, 1);
因为这相当于:
(obj.*obj.pf)(0, 1);
obj.*obj.pf(0, 1) /* or */ obj.*(obj.pf)(0, 1)
pf是一个方法指针,您希望调用它指向的方法,因此必须使用
obj.*(obj.pf(0, 1)) // grammar expects obj.pf to be a callable returning a
// pointer to member
它表示您调用pf所指方法的对象obj
请参见此处的结果:
< P>语法是非常不自然的,但C++优先规则的结果…
(obj.*obj.pf)(1, 2);
请参阅:@CiroSantilli的可能副本六四事件法轮功纳米比亚威视, 不,两者都不同。您的链接问题解释了,
“如何使用函数指针调用类成员?”
,而我在问“,函数指针本身也是类成员时。”
。请注意,这两个问题的答案是不同的。我同意这有一个额外的步骤。但我觉得,一旦知道函数指针语法,就可以很容易地推断出它:(obj.*ptr)
,这里就是ptr==(obj.ptr)
。但既然你不同意,我就收回;-)+1,thx;它是独一无二的;如果obj
是B
?:)的成员,会发生什么情况@iammilind:obj
具有类型B
,因此它不能是B
的成员,因为这意味着递归类定义。你能澄清一下你的意思吗?不。即使B里面有一个像obj
这样的成员;在签名中包含(..)
之前,这不会是一个问题。我现在很清楚这个问题。因此,要么是编译错误,要么工作正常。