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>
此方法利用 myMap[s](2,3) 语法,该语法检索映射到字符串 s 的函数指针并使用提供的参数调用相应的函数。显示的示例计算并输出 5 作为“add”函数调用的结果。
以上是如何通过存储在字符串中的名称来调用 C 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!