首頁 >後端開發 >C++ >如何使用 std::map 在 C 中實現類似反射的功能?

如何使用 std::map 在 C 中實現類似反射的功能?

DDD
DDD原創
2024-10-27 01:22:30997瀏覽

How to Achieve Reflection-like Functionality in C   Using std::map?

如何在C 中透過函數名稱(std::string) 呼叫函數

在C 中,通常使用條件語句根據給定的值呼叫函數細繩。然而,這種方法可能冗長且不靈活。

C 中的反射

透過名稱呼叫函數的能力稱為反射。不幸的是,C 本身並不支援此功能。

使用 std::map 的解決方法

一種解決方法是建立一個將函數名稱 (std::string) 與函數指標。對於具有相同原型的函數,此技術簡化了過程:

<code class="cpp">#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() {
    // Initialize the map:
    std::map<std::string, FnPtr> myMap;
    myMap["add"] = add;
    myMap["sub"] = sub;

    // Usage:
    std::string s("add");
    int res = myMap[s](2, 3);
    std::cout << res;
}</code>

在此範例中,myMap[s](2, 3) 檢索映射到字串s 的函數指標並呼叫對應的函數參數2 和3。輸出將為 5。

以上是如何使用 std::map 在 C 中實現類似反射的功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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