所以我的控制台应用程序基于命令,例如用户可以输入“connect 127.0.0.1”,它会做的事情。我已经能够将命令与参数分开,但是如何根据命令字符串调用函数,并将命令与字符串对应的命令相匹配?
答案 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。
答案 1 :(得分:0)
#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;
}