如何实现输入特定指令列出函数列表并调用指定函数?
实现指令驱动的函数调用系统
参考终端目录选择的交互逻辑(仅作交互模式参考,与终端/目录功能无关),需要实现以下功能:
- 用户输入
menu时,显示可调用的函数列表:games、text、about- 用户输入
open games时,调用对应的game()函数
现有测试函数如下:void game() { cout << "you are in game"; } void text() { cout << "you are in text"; } void about() { cout << "you are in about"; }请问如何实现上述指令功能?
实现方案
核心思路是用映射表关联指令与函数,循环读取用户输入并解析执行对应操作,以下是完整可运行的C++代码:
#include <iostream> #include <string> #include <unordered_map> #include <sstream> // 测试函数 void game() { std::cout << "you are in game\n"; } void text() { std::cout << "you are in text\n"; } void about() { std::cout << "you are in about\n"; } int main() { // 建立函数名到函数指针的映射,快速查找对应函数 std::unordered_map<std::string, void(*)()> funcMap = { {"games", game}, {"text", text}, {"about", about} }; std::string input; std::cout << "输入指令(输入menu查看列表,输入quit退出):\n"; while (true) { std::cout << "> "; std::getline(std::cin, input); if (input == "menu") { std::cout << "可调用的函数列表:\n"; for (const auto& pair : funcMap) { std::cout << "- " << pair.first << "\n"; } } else if (input.substr(0, 5) == "open ") { // 提取"open "后的函数名字符串 std::string funcName = input.substr(5); auto it = funcMap.find(funcName); if (it != funcMap.end()) { // 调用匹配到的函数 it->second(); } else { std::cout << "错误:不存在名为" << funcName << "的函数\n"; } } else if (input == "quit") { std::cout << "退出程序\n"; break; } else { std::cout << "未知指令,输入menu查看可用指令\n"; } } return 0; }
关键细节说明
- 函数映射表:用
std::unordered_map存储函数名和函数指针的对应关系,实现O(1)时间复杂度的查找 - 输入处理:用
std::getline读取完整输入行,支持带空格的指令(如open games) - 指令解析:通过判断输入前缀或完全匹配,分别执行显示菜单、调用函数、退出程序等逻辑
- 容错处理:对未知指令、不存在的函数名给出明确提示,提升交互友好性
内容的提问来源于stack exchange,提问作者bleachedb
相关产品推荐
相关产品推荐

