因此,我的控制台应用程序是基于命令的,例如,用户可以输入“ 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 provides也argp_parse
。考虑或许将interpreter嵌入程序中,例如嵌入GNU Guile或Lua。但是,嵌入解释器是一项重要的建筑设计决策,应尽早进行。然后,您的应用程序变为Turing-complete。
关于c++ - 在控制台应用程序中解析命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31468520/