1

我正在寻找自动生成功能。例如,我可以在不定义每个函数的情况下创建 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] ], &greedy_consen)

这将创建一个函数 u_greedy_consen,它会自动查找任何给定的参数集,并在找到时使用这些参数调用 greedy_consen。那可能吗?

谢谢

4

0 回答 0