C ++中的语法,用于返回函数指针的成员函数

时间:2011-11-11 23:22:59

标签: c++

我有以下程序,我想修复它。不知道如何使它在语法上正确。

class A{
    void f(){};
    void (A::*)()get_f(){return &A::f;}
};

另外,我想最终移动函数定义大纲,如下所示。

void A::(*)()A::get_f(){
    return &A::f;
}

这里的语法是什么?

非常感谢你的帮助!

5 个答案:

答案 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://ideone.com/Q7G4s

来源:http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.6