我有以下程序,我想修复它。不知道如何使它在语法上正确。
class A{
void f(){};
void (A::*)()get_f(){return &A::f;}
};
另外,我想最终移动函数定义大纲,如下所示。
void A::(*)()A::get_f(){
return &A::f;
}
这里的语法是什么?
非常感谢你的帮助!
答案 0 :(得分:5)
像这样:
class A{
void f(){};
void (A::*get_f())() {return &A::f;}
};
同样地:
void (A::* A::get_f())(){
return &A::f;
}
See it in action on ideone。请注意,使用它与使用typedef(在其他答案中)相同。
顺便说一下,加分和呕吐(哈哈):void (A::* (A::* get_get_f())())();
答案 1 :(得分:1)
只需使用typedef:
class A {
typedef void (A::*AFn)();
void f() { }
AFn get_f(){ return &A::f; }
};
答案 2 :(得分:1)
最简单的解决方案是typedef:
class A
{
typedef void (A::*funptr)();
void f() {}
funptr get_f() { return &A::f; }
};
如果您坚持直接编写,请使用
class A
{
void f() {}
void (A::*get_f())() { return &A::f; }
};
答案 3 :(得分:1)
使用typedef,它只是使语法更容易理解。
在以下示例中,该函数是在您的类之外定义的。
class A{
typedef void (A::*p)();
void f(){};
p get_f();
};
A::p A::get_f() { return &A::f; }
您可以用同样的方式在类中定义它,
class A{
typedef void (A::*p)();
void f(){};
p get_f() { return &A::f; }
};
答案 4 :(得分:0)
class A{
public:
typedef void(A::*mem_ptr)();
void f(){};
mem_ptr get_f();
};
A::mem_ptr A::get_f()
{return &A::f;}
int main() {
A a;
A::mem_ptr p = a.get_f();
(a.*p)();
}
来源:http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.6