ホームページ  >  記事  >  バックエンド開発  >  std::map を使用して C でリフレクションのような機能を実現するにはどうすればよいですか?

std::map を使用して C でリフレクションのような機能を実現するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-27 01:22:30895ブラウズ

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

C で関数を名前 (std::string) で呼び出す方法

C では、条件付きステートメントを使用して、指定された関数に基づいて関数を呼び出すのが一般的です。弦。ただし、このアプローチは冗長で柔軟性に欠ける可能性があります。

C でのリフレクション

関数を名前で呼び出す機能は、リフレクションとして知られています。残念ながら、C はこの機能をネイティブにサポートしていません。

std::map を使用した回避策

1 つの回避策は、関数名 (std::string) を関連付ける std::map を作成することです。関数ポインター。同じプロトタイプを持つ関数の場合、この手法によりプロセスが簡素化されます。

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。