[英]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
出來的嗎?
取消引用ptr
,獲取函數返回指向函數的指針返回void: *ptr
調用函數,獲取函數返回void的指針: (*ptr)()
取消引用指針,得到函數返回void: *(*ptr)()
調用該函數,得到無效: (*(*ptr)())()
現在把它變成一個聲明:
void (*(*ptr)())();
PS我知道其他人在此期間已經回答了(我已經投了贊成票)。 但我想展示通用流程以獲得申報表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.