You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现输入特定指令列出函数列表并调用指定函数?

实现指令驱动的函数调用系统

参考终端目录选择的交互逻辑(仅作交互模式参考,与终端/目录功能无关),需要实现以下功能:

  • 用户输入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;
}

关键细节说明

  1. 函数映射表:用std::unordered_map存储函数名和函数指针的对应关系,实现O(1)时间复杂度的查找
  2. 输入处理:用std::getline读取完整输入行,支持带空格的指令(如open games)
  3. 指令解析:通过判断输入前缀或完全匹配,分别执行显示菜单、调用函数、退出程序等逻辑
  4. 容错处理:对未知指令、不存在的函数名给出明确提示,提升交互友好性

内容的提问来源于stack exchange,提问作者bleachedb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:41:03