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

Chr*_*ica 17 c++ function-pointers

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

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

funky_func ptr;
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

(void (*)()) (*ptr)();
Run Code Online (Sandbox Code Playgroud)

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

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

Die*_*ühl 24

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

void (*(*ptr)())()
Run Code Online (Sandbox Code Playgroud)

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

auto (*ptr)() -> void (*)()
Run Code Online (Sandbox Code Playgroud)

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

auto (*ptr)() -> auto (*)() -> void
Run Code Online (Sandbox Code Playgroud)

  • 啊,非常感谢,一个跟踪返回类型的好用例. (3认同)

Rei*_*ica 23

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

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

假设我们有这样的指针,ptr.如何void摆脱它?

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

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

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

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

现在把它变成一个声明:

void (*(*ptr)())();
Run Code Online (Sandbox Code Playgroud)

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

  • *`我想展示到达申报表的通用流程。`* --这是一个很好的方法,我可以很快从你的回答中掌握。谢谢! (2认同)