在C 中按名稱(std::string)調用函數
在C 中,不能直接按儲存在a 中的名稱呼叫函數細繩。但是,存在實現此功能的變通方法。
基本方法
基本方法涉及使用一系列「if-else」語句或「switch-case」構造,明確檢查儲存在字串中的函數名稱並呼叫對應的函數。如提供的程式碼片段所示,此方法需要手動維護函數及其名稱的清單。
Reflection
問題中建議的方法稱為反射,涉及在運行時動態存取和操作程序元素。雖然 C 本身不支援反射,但某些函式庫提供有限的反射功能。
使用std::map 的解決方法
一個解決方法涉及建立一個std::map將函數名稱(std::string 鍵)與函數指標(int (*FnPtr)(int, int) 值)相關聯。這樣可以根據函數名稱高效檢索和呼叫函數。
提供的程式碼片段說明了這種方法:
<code class="c++">#include <iostream> #include <map> int add(int i, int j) { return i + j; } int sub(int i, int j) { return i - j; } typedef int (*FnPtr)(int, int); 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 ) 表達式會擷取與字串「add」關聯的函數指針,並使用參數2 和3 呼叫它,導致輸出5。
以上是如何在 C 中按名稱呼叫函數(儲存在 std::string 中)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!