C 中透過函數名稱呼叫函數(std::string)
C 中透過函數名稱呼叫函數的問題儲存在字串中已經出現。雖然涉及條件語句的基本方法是已知的,但仍在尋求更簡單的替代方案。
基本方法
一種簡單的方法涉及使用一系列 if-else 語句來匹配函數名稱和對應的函數指標。這種方法如下圖所示:
<code class="cpp">int function_1(int i, int j) { return i*j; } int function_2(int i, int j) { return i/j; } int callFunction(int i, int j, string function) { if(function == "function_1") { return function_1(i, j); } else if(function == "function_2") { return function_2(i, j); } ... return function_1(i, j); }</code>
建議的替代方案
新方法旨在透過利用std::map 將函數名稱對應到函數指標。對於具有相同原型的函數,此技術可以提供更簡潔的解決方案:
<code class="cpp">#include <map> typedef int (*FnPtr)(int, int); int add(int i, int j) { return i+j; } int sub(int i, int j) { return i-j; } int main() { std::map<std::string, FnPtr> myMap; myMap["add"] = add; myMap["sub"] = sub; std::string s("add"); int res = myMap[s](2,3); std::cout << res; }</code>
此方法利用myMap[s](2,3) 語法,該語法檢索映射到字串s 的函數指標並使用提供的參數呼叫對應的函數。顯示的範例計算並輸出 5 作為“add”函數呼叫的結果。
以上是如何透過儲存在字串中的名稱來呼叫 C 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!