我的函数使用不同数量的参数(一个或多个double值)。这些函数的指针存储在公式解释器中的向量中,并将在需要时用于在运行时调用函数。要调用的函数和要传递的参数数量取决于公式本身,并且仅在运行时才知道。
从解释公式我得到一个指向要调用的函数的迭代器和一个带有要传递的参数的vector<double>
。在当前版本中,我解决了通过代码重复传递可变数量参数的需要,如:
// (the number of args in dblVec to match the number of args the function accepts is checked previously)
if (dblVec.size() == 1) result = (*funcIter)->function(dblVec.at(0));
else if (dblVec.size() == 2) result = (*funcIter)->function(dblVec.at(0), dblVec.at(1));
else if (dblVec.size() == 3) result = (*funcIter)->function(dblVec.at(0), dblVec.at(1), dblVec.at(2));
...
这不是很优雅且有限制,但如果参数的数量不大于上述测试的数量,它就有效。我的问题是:
是否有某种方法可以在参数列表中为要调用的函数设置“隐式”循环,如(伪代码)
result = (*funcIter)->function(passVectorContentsAsMultipleSeparatedDoubles(dblVec));
这不是传递整个向量的解决方案,因为函数将是“标准”函数(如sin(double)
,cos(double)
,atan2(double, double)
等)以及传递的自定义函数用户使用解释类(使用解释类的程序员)。
提前感谢任何提示。
答案 0 :(得分:3)
使用C ++ 11,这实际上是可行的,我有一个非常相似的问题。看看以下内容: