首页 >后端开发 >C++ >如何在 C 中按名称调用函数(存储在 std::string 中)?

如何在 C 中按名称调用函数(存储在 std::string 中)?

Patricia Arquette
Patricia Arquette原创
2024-10-26 07:04:311041浏览

How Can I Call Functions by Name (Stored in a std::string) in C  ?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn