首页 >后端开发 >C++ >如何通过存储在字符串中的名称来调用 C 函数?

如何通过存储在字符串中的名称来调用 C 函数?

Susan Sarandon
Susan Sarandon原创
2024-10-28 11:04:30754浏览

How to Call a C   Function by Its Name Stored in a String?

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

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