因此,我的控制台应用程序是基于命令的,例如,用户可以输入“ connect 127.0.0.1”,然后它将执行操作。我已经能够将命令与参数分开,但是如何使它基于命令字符串调用函数,并具有将命令与其对应字符串匹配的功能?

最佳答案

使用标准的parsing技术,并从std::cin读取命令

您可能要声明参数向量的类型。

typedef std::vector<std::string> vectarg_T;


声明函数处理命令的类型:

typedef std::function<void(vectarg_T)> commandprocess_T;


并具有将命令名称与其处理器关联的映射:

std::map<std::string,commandprocess_T> commandmap;


然后在初始化时填写该地图,例如使用匿名函数:

 commandmap["echo"] = [&](vectarg_T args){
    int cnt=0;
    for (auto& curarg: args) {
      if (cnt++ > 0)   std::cout << ' ';
      std::cout << curarg;
    }
    std::cout << std::endl;
 };


如果您的问题与解析(main的)程序参数有关,请使用getopt(3)和相关函数。 GNU libc providesargp_parse

考虑或许将interpreter嵌入程序中,例如嵌入GNU GuileLua。但是,嵌入解释器是一项重要的建筑设计决策,应尽早进行。然后,您的应用程序变为Turing-complete

关于c++ - 在控制台应用程序中解析命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31468520/

10-11 23:03
查看更多