在 C 中按名称(std::string)调用函数
在 C 中,不能直接按存储在 a 中的名称调用函数细绳。但是,存在实现此功能的变通方法。
基本方法
基本方法涉及使用一系列“if-else”语句或“switch-case”构造,显式检查存储在字符串中的函数名称并调用相应的函数。如提供的代码片段所示,此方法需要手动维护函数及其名称的列表。
Reflection
问题中建议的方法称为反射,涉及在运行时动态访问和操作程序元素。虽然 C 本身不支持反射,但某些库提供有限的反射功能。
使用 std::map 的解决方法
一种解决方法涉及创建一个 std::map将函数名称(std::string 键)与函数指针(int (*FnPtr)(int, int) 值)相关联。这样可以根据函数名称高效检索和调用函数。
提供的代码片段说明了这种方法:
<code class="c++">#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() { 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 ) 表达式检索与字符串“add”关联的函数指针,并使用参数 2 和 3 调用它,导致输出 5。
以上是如何在 C 中按名称调用函数(存储在 std::string 中)?的详细内容。更多信息请关注PHP中文网其他相关文章!