首頁  >  文章  >  後端開發  >  如何在 C 中按名稱呼叫函數(儲存在 std::string 中)?

如何在 C 中按名稱呼叫函數(儲存在 std::string 中)?

Patricia Arquette
Patricia Arquette原創
2024-10-26 07:04:31938瀏覽

How Can I Call Functions by Name (Stored in a std::string) in C  ?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn