Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;对于返回函数指针的成员函数_C++ - Fatal编程技术网

C++ C++;对于返回函数指针的成员函数

C++ C++;对于返回函数指针的成员函数,c++,C++,我有下面的程序,我想把它修好。不知道如何使其语法正确 class A{ void f(){}; void (A::*)()get_f(){return &A::f;} }; 另外,我希望最终移动函数定义大纲,如下所示 void A::(*)()A::get_f(){ return &A::f; } 这里的正确语法是什么 非常感谢你的帮助 只需使用typedef: class A { typedef void (A::*AFn)();

我有下面的程序,我想把它修好。不知道如何使其语法正确

class A{
    void f(){};
    void (A::*)()get_f(){return &A::f;}
};
另外,我希望最终移动函数定义大纲,如下所示

void A::(*)()A::get_f(){
    return &A::f;
}
这里的正确语法是什么

非常感谢你的帮助

只需使用typedef:

class A {
    typedef void (A::*AFn)();

    void f() { }

    AFn get_f(){ return &A::f; }
};
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;}
};
同样地:

void (A::* A::get_f())(){
    return &A::f;
}
。请注意,使用它与使用typedef(在其他答案中)相同

顺便说一句,额外加分和呕吐(哈,哈):


最简单的解决方案是typedef:

class A {
    typedef void (A::*AFn)();

    void f() { }

    AFn get_f(){ return &A::f; }
};
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; }
};


来源:

使用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; }
};

“使用typedef。”——@Ed:只是对我当前问题的抽象。:)实际问题——如何编写宣言——已经得到其他人的回答。这里有一个链接,可能对练习如何阅读它们很有用。对于任何能够编写返回&a::get\u f的函数的人来说,这是额外的一点
typedef
是欺骗,decltype也是欺骗。@rodrigo:我认为那将是:
void(A:*(A::*get_get_f())())({return&A::get_f;}
,那么如果你想对
A
的一个实例调用
f()
(A.*(A.*(A.get_get_f())())())())。我可以不使用typedef来执行吗?只是好奇。你可以,但没有人会想。谢谢!这正是我想要的!实际上它是无效的(A::*get_f())({return&A::f;}
但是typedef是一个更好的方法。@bames53:你写的东西和jpalecek的答案有什么区别?@jpalecek:如果我仍然不想使用typedef,你能在
main()
中添加如何使用它吗?@羌Li:我相信会是:
(A.*(A.get_f())())