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)
Rei*_*ica 23
C(和C++)声明的一般规则是:如果您将声明类型化为表达式,它将具有声明的类型.
所以,你想要一个指向函数的指针,它返回返回void的函数的指针.
假设我们有这样的指针,ptr.如何void摆脱它?
ptr取消引用,获取函数返回指向函数返回void的指针:*ptr
调用函数,获取函数返回void的指针: (*ptr)()
取消引用指针,使函数返回void: *(*ptr)()
调用该函数,得到无效: (*(*ptr)())()
现在把它变成一个声明:
void (*(*ptr)())();
Run Code Online (Sandbox Code Playgroud)
PS我知道其他人在此期间已经回答了(我已经投了赞成票).但我想展示通用流程以获得申报表.
| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |