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