我编写了一个Shell。
我有不同的功能和不同的参数。
void func1(void);
void func2(char * x,);
void func3(char * x, string y);
目前使用地图存储字符串和指针。
typedef map<string,void (*)()> t_list;
map<string,void(*)()>::iterator it;
t_list list;
list["argument1"]=&func1;
找到并启动我使用的功能:
it=list.find("argument");
if(it != list.end())
{
if->second();
}
是否可以在地图中存储具有不同参数的所有功能?怎么样?
答案 0 :(得分:1)
shell的合理解决方案可以是一个函数,它接受一个字符串向量并返回错误代码。所以这个单一的签名:
int (*func)(std::vector<std::string> const &args)
然后在函数中你需要解析参数,你可以调用真正的实现(例如void func3(char * x, string y);
)
答案 1 :(得分:0)
为什么不使用仿函数?它们更易于使用,而且更多是OOP link。