我正在寻找自动生成功能。例如,我可以制作50个名为foo1到foo50的函数而不定义每个函数吗?
我正在使用它作为域特定语言的解释器。现在,我有大约80个函数遵循这个通用公式:
pqlsymbol * u_greedy_consen(vector<pqlsymbol * > arglist)
{
pqlsymbol * result;
if (arglist.size() == 1 && arglist[0]->is_treeset()){
result = new pqlsymbol(greedy_consen(arglist[0]->get_treeset(), 100 ) );
}
else if (arglist.size() == 2 && arglist[0]->is_treeset() && arglist[1]->is_double()){
result = new pqlsymbol(greedy_consen(arglist[0]->get_treeset(), (float)(arglist[1]->get_double()) ) );
}
else if (arglist.size() == 2 && arglist[0]->is_treeset() && arglist[1]->is_int()){
result = new pqlsymbol(greedy_consen(arglist[0]->get_treeset(), (float)(arglist[1]->get_int()) ) );
}
else {
//cout << "consensus expects 1 treeset and optinally 1 Int/Double argument. " << "Found " << get_arg_types(arglist) << endl;
result = new pqlsymbol(ERROR, "Type Error");
}
return result;
}
arglist是在命令行传递的参数列表。它检查arglist的大小,然后检查参数是否是正确的类型,然后调用相应的函数。
所以,我想知道我是否可以将其减少到更一般的功能。我会给它一个预期类型的参数的向量,然后是一个指向函数的指针,如果找到这些参数将被调用。
那么,有没有办法像我这样打电话:
add_function(“greedy_consen”,[[treeset],[treeset,int],[treeset,double]],&amp; greedy_consen)
这将创建一个函数u_greedy_consen,它会自动查找任何给定的参数集,并在找到时使用这些参数调用greedy_consen。这可能吗?
由于