繁体   English   中英

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

[英]Pointer to function returning function pointer

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

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

funky_func ptr;

我尝试了以下内容

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

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

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

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

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

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

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

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

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

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

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

假设我们有一个指针, ptr 如何获得void出来的吗?

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

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

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

  4. 调用该函数,得到无效: (*(*ptr)())()

现在把它变成一个声明:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM