Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++_Function Pointers - Fatal编程技术网

C++ 返回函数指针的函数指针

C++ 返回函数指针的函数指针,c++,function-pointers,C++,Function Pointers,我想声明一个类型为pointer to function的变量,返回指向函数的指针。基本上是以下功能,但没有任何typedefs: typedef void (*func)(); typedef func (*funky_func)(); funky_func ptr; 我尝试了以下方法 (void (*)()) (*ptr)(); 但它给出了一个“未声明的标识符”——ptr的错误(可能是由于完全不同的解析)。不精通解析C++的复杂,我想知道这是不是可能的,如果是的话,怎么做。 < P>(

我想声明一个类型为pointer to function的变量,返回指向函数的指针。基本上是以下功能,但没有任何
typedef
s:

typedef void (*func)();
typedef func (*funky_func)();

funky_func ptr;
我尝试了以下方法

(void (*)()) (*ptr)();
但它给出了一个“未声明的标识符”——ptr的错误(可能是由于完全不同的解析)。不精通解析C++的复杂,我想知道这是不是可能的,如果是的话,怎么做。
< P>(请考虑这是一个完全人为的场景,出于好奇,没有任何实际的理由。我完全知道,在实践中,代码< TyPufFS是使用此处的方法,如果使用函数指针。)< /P> < P> >您可以查看<代码>信号()/<代码>,这是一个使用<代码>空隙(*)()的函数。并返回其中一个。变量
ptr
可以这样声明:

void (*(*ptr)())()
这个符号有点笨拙,而且明显是由内而外的。使用尾部返回类型可能更容易:

auto (*ptr)() -> void (*)()
。。。当然,也可以一直使用尾部返回类型:

auto (*ptr)() -> auto (*)() -> void
C(和C++)声明的一般规则是:如果将声明作为表达式键入,它将具有声明的类型

所以,您需要一个指向函数的指针,它返回指向返回void的函数的指针

假设我们有这样一个指针,
ptr
。如何从中获得
void

  • 取消引用
    ptr
    ,获取函数返回指针,指向返回void的函数:
    *ptr

  • 调用函数,获取返回void的函数指针:
    (*ptr)(

  • 取消引用该指针,得到一个返回void的函数:
    *(*ptr)(

  • 调用该函数,得到void:
    (*(*ptr)()()(

  • 现在把它变成一个声明:

    void (*(*ptr)())();
    

    另外,我知道其他人在这段时间内已经回答了(我已经投了更高的票)。但是我想展示到达声明表单的通用过程。

    啊,非常感谢,这是一个很好的跟踪返回类型的用例。
    我想展示到达声明表单的通用过程。
    ——这是一个很好的方法,我可以很快从您的答案中领会。谢谢