2016-12-19 208 views
1

我有一些采用不同数量参数(一个或多个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)等)以及由用户(使用解释类的程序员)传递给解释类的自定义函数。

在此先感谢您的任何提示。

+0

在C++中没有这样的语言功能。 –

+0

不能让你的功能采用'矢量'作为参数而不是单个双打? – user463035818

回答

3

随着C++ 11这实际上是可能的,我有一个非常类似的问题。看看以下内容:

Generic template for calling function with vector elements

+0

@kaolo:谢谢你的提示。我会试试这个。 – Armin

+0

@Armin:顺便说一下,我已经使用JSON和WAMP v1协议将其扩展为远程过程调用功能:https://github.com/koalo/wamp_cpp/blob/master/wamp_cpp/RPCallable.h – koalo

相关问题