如何在C ++中将容器的内容传递给可变参数

时间:2018-08-07 14:22:19

标签: c++ variadic-functions

想象一下,对于现有的T类型,我们有一个可变参数void foo(T args...)

在Java(void foo(T... args)和C#(void foo(params T[] args))中,传递类型为T T[]的数组是一种将其内容作为参数传递给foo的有效方法。

在Scala(def foo(args: T*): Unit)中,我可以通过Seq[T]

如何将容器的内容(数组,向量,迭代器等)作为参数传递给C ++中的可变参数?甚至有可能吗?

1 个答案:

答案 0 :(得分:1)

C ++中的varargs参数列表是在编译时而不是在运行时建立的,因此,如果有的话,您只能在其中传递固定长度的项数组。

您可以使用tuple来调用带有std::apply()参数的函数。您可以create a tuple from a fixed size array

或者,您也可以创建自己的类似apply的模板帮助程序函数,该函数以递归方式从数组元素中组装参数包并为您调用该函数,或者使用来自其中的多种元编程帮助程序之一标准库为您完成。