C では、条件付きステートメントを使用して、指定された関数に基づいて関数を呼び出すのが一般的です。弦。ただし、このアプローチは冗長で柔軟性に欠ける可能性があります。
関数を名前で呼び出す機能は、リフレクションとして知られています。残念ながら、C はこの機能をネイティブにサポートしていません。
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 サイトの他の関連記事を参照してください。