C++中如何根据用户输入的字符串调用对应函数?
在C++中根据字符串调用对应函数的实现方法
C++本身不支持直接通过用户输入的字符串调用函数——你示例里的func_name()写法是无效的,因为字符串对象无法直接被解析为函数标识符。不过可以通过函数指针映射表轻松实现这个需求,具体步骤如下:
核心思路
用哈希表(比如std::unordered_map)存储字符串与对应函数指针的关联关系,读取用户输入后,在表中查找匹配项,找到则调用对应的函数。
完整实现代码
#include <iostream> #include <string> #include <unordered_map> void hello() { std::cout << "print hello\n"; } void hello_world() { std::cout << "print hello_world\n"; } int main() { // 定义统一的函数指针类型(适配所有目标函数的签名) using FuncPtr = void(*)(); // 构建字符串到函数的映射 std::unordered_map<std::string, FuncPtr> funcMap = { {"Hello", hello}, {"Hello_world", hello_world} }; std::string func_name; std::cout << "enter the function you would like to call: \n 1.Hello \n 2.Hello_world\n"; std::cin >> func_name; // 查找并执行函数 auto funcIter = funcMap.find(func_name); if (funcIter != funcMap.end()) { funcIter->second(); // 调用匹配到的函数 } else { std::cout << "Error: Function '" << func_name << "' is not defined.\n"; } return 0; }
扩展说明
- 如果目标函数的签名不同(比如带参数、有返回值),可以用
std::variant存储不同类型的函数指针,或者通过抽象基类+多态的方式封装函数调用逻辑。 - 可以统一输入字符串的大小写(比如转为小写后再查找),避免因大小写不匹配导致的调用失败。
内容的提问来源于stack exchange,提问作者user19899551
相关产品推荐
相关产品推荐

