我想声明一个类型为的变量指向函数返回指向函数的指针。基本上是以下内容,但没有任何typedef
s:
typedef void (*func)();
typedef func (*funky_func)();
funky_func ptr;
我尝试了以下
(void (*)()) (*ptr)();
但它为ptr
提供了"未声明的标识符" -error(可能是由于完全不同的解析)。由于不熟悉解析C ++的复杂性,我想知道这是否可行,如果是,那该怎么做。
(为了好奇,请考虑这是一个完全人为的场景,没有任何实际原因。我完全清楚在实践中typedef
是这里的方法,如果使用函数指针的话。)
答案 0 :(得分:24)
您可以查看signal()
的声明,该声明是一个void(*)()
并返回其中一个的函数。变量ptr
可以这样声明:
void (*(*ptr)())()
这个符号有点尴尬,显而易见。使用尾随返回类型可能更容易:
auto (*ptr)() -> void (*)()
...或者,当然,一直使用尾随返回类型:
auto (*ptr)() -> auto (*)() -> void
答案 1 :(得分:23)
C(和C ++)声明的一般规则是:如果您将声明作为表达式键入,它将具有声明的类型。
所以,你想要一个指向函数的指针,它返回指向函数返回void的指针。
假设我们有一个指针ptr
。如何从中获取void
?
取消引用ptr
,让函数返回指向函数的指针返回void:*ptr
调用该函数,获取指向函数的指针返回void:(*ptr)()
取消引用指针,使函数返回void:*(*ptr)()
调用该函数,获取无效:(*(*ptr)())()
现在把它变成一个声明:
void (*(*ptr)())();
P.S。我知道其他人在此期间已经回答了(我已经投了赞成票)。但我想展示通用流程以获得申报表。