因此,我的控制台应用程序基于命令,例如,用户可以输入"connect 127.0.0.1“并执行一些操作。我已经能够将命令从参数中分离出来,但是如何使它基于命令字符串调用函数,并使命令与其字符串对应方相匹配呢?
发布于 2015-07-16 20:48:10
使用标准解析技术,并从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 提供也是argp_parse
。
考虑,或者将 翻译员嵌入到您的程序中,例如嵌入Guile或Lua。但是嵌入解释器是一个重要的架构设计决策,应该尽早进行。然后,您的应用程序将成为图灵-完全。
发布于 2015-07-16 21:12:58
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
map<string,string> commands;
cout<<argc<<endl;
for(int i=1;i<=argc/2;i++)
{
string cmd =argv[i*2-1];
string param =argv[i*2];
cout<<cmd<<endl;
}
string ip = commands["connect"];
cout<<"are you want to connect "<<ip<<" ?";
return 0;
}
https://stackoverflow.com/questions/31468520
复制相似问题