指向函数返回函数指针的指针

时间:2013-09-16 11:03:13

标签: c++ function-pointers

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

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

funky_func ptr;

我尝试了以下

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

但它为ptr提供了"未声明的标识符" -error(可能是由于完全不同的解析)。由于不熟悉解析C ++的复杂性,我想知道这是否可行,如果是,那该怎么做。

(为了好奇,请考虑这是一个完全人为的场景,没有任何实际原因。我完全清楚在实践中typedef是这里的方法,如果使用函数指针的话。)

2 个答案:

答案 0 :(得分:24)

您可以查看signal()的声明,该声明是一个void(*)()并返回其中一个的函数。变量ptr可以这样声明:

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

这个符号有点尴尬,显而易见。使用尾随返回类型可能更容易:

auto (*ptr)() -> void (*)()

...或者,当然,一直使用尾随返回类型:

auto (*ptr)() -> auto (*)() -> void

答案 1 :(得分:23)

C(和C ++)声明的一般规则是:如果您将声明作为表达式键入,它将具有声明的类型。

所以,你想要一个指向函数的指针,它返回指向函数返回void的指针。

假设我们有一个指针ptr。如何从中获取void

  1. 取消引用ptr,让函数返回指向函数的指针返回void:*ptr

  2. 调用该函数,获取指向函数的指针返回void:(*ptr)()

  3. 取消引用指针,使函数返回void:*(*ptr)()

  4. 调用该函数,获取无效:(*(*ptr)())()

  5. 现在把它变成一个声明:

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

    P.S。我知道其他人在此期间已经回答了(我已经投了赞成票)。但我想展示通用流程以获得申报表。