【发布时间】:2018-08-07 14:22:19
【问题描述】:
假设我们有一个用于现有类型 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++ 中的可变参数函数?有没有可能?
【问题讨论】:
-
观察到
void foo (T args...)与void foo (T args, ...)相同(省略号前的逗号是可选的)是C 风格的可变参数函数(所以va_list、va_start、va_arg,va_end),不是 C++11 风格的模板可变参数函数;如果你想要一个 C++11 风格的可变参数函数,你必须编写template <typename ... Ts> void foo (Ts ... args)来定义一个可变参数函数,该函数接收(可能)不同类型的可变参数列表。如果你想要一个相同类型元素的可变参数列表......嗯,有点复杂。 -
@NathanOliver 这两个问题都是相关的,但我认为它们不符合重复的条件,因为每个问题都针对特定情况,而这个问题涉及更一般的概念,即可变参数调用是否使用容器这种方式是可能的。我已经在谷歌上搜索了几天,但找不到答案,所以我们在这里。其他 C++ 初学者也可能找不到链接的问题。