我有一些采用不同数量参数(一个或多个double值)的函数。指向这些函数的指针存储在公式解释器中的向量中,并在需要时用于在运行时调用函数。要调用的函数和要传递的参数的数量取决于公式本身,并且仅在运行时才知道。C++将可变数量的参数传递给一个函数
通过解释公式,我得到一个指向调用函数的迭代器和一个带有参数传递的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)
等)以及由用户(使用解释类的程序员)传递给解释类的自定义函数。
在此先感谢您的任何提示。
在C++中没有这样的语言功能。 –
不能让你的功能采用'矢量'作为参数而不是单个双打? –
user463035818