![](/img/trans.png)
[英]How to declare/define a function with the same return and parameter types as a given function pointer?
[英]#define/macro to return a function pointer to a function given in the same file
說我有代碼
void 1funct() {
(...)
}
void 2funct() {
(...)
}
etc., to
void nfunct() {
(...)
}
是否可以將 function 指針返回到正確的 function 給定的 n 由
#define RET_FUNC_POINTER(n) (&nfunct);
?
是的 — 宏可以使用##
將源代碼字符連接成單個標記:
#define RET_FUNC_POINTER(n) (&n ## funct);
(標記是源代碼中不可見的“構建塊”,是解析器在嘗試理解您的程序時從您的代碼生成的離散文本單元。它們大致類似於英語中的“單詞”,但它們不需要在 C++ 中用空格分隔,除非省略空格只會產生一個標記:例如int main
vs intmain
,但int *
vs int*
。使用##
我們可以獲取兩個可能的標記int
和main
,並使用預處理器而是強制它們進入intmain
。只是,您的 arguments 之一是宏的“變量”。請注意,您不需要加入&
和n ## funct
部分,因為&
已經是一個單獨的標記,並且應該保持這種狀態。)
但是,您可能希望考慮一個不錯的指針數組。
如果n
在編譯時是靜態已知的(它必須是你的宏才能工作),那么除了混淆你的代碼(這不是一個收獲)之外,僅僅編寫&1funct
, &2funct
等你並沒有真正獲得任何東西。
另請注意,您的 function 名稱不能以數字開頭; 您必須選擇不同的命名方案。
不知道為什么要這樣做(而不僅僅是使用const
數組),但使用宏很容易做到:
#define RET_FUNC_POINTER(n) (n##funct)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.