ホームページ >バックエンド開発 >C++ >文字列に格納された名前で C 関数を呼び出すにはどうすればよいですか?

文字列に格納された名前で C 関数を呼び出すにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 11:04:30754ブラウズ

How to Call a C   Function by Its Name Stored in a String?

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>

この手法では、文字列 s にマップされた関数ポインタを取得する myMap[s](2,3) 構文を利用します。指定された引数を使用して対応する関数を呼び出します。示されている例では、「add」関数呼び出しの結果として 5 が計算され、出力されます。

以上が文字列に格納された名前で C 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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