簡體   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