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
这样的成员;在签名中包含
(..)
之前,这不会是一个问题。我现在很清楚这个问题。因此,要么是编译错误,要么工作正常。