【发布时间】:2021-09-08 17:13:49
【问题描述】:
如何将可变参数函数参数转换为数组? 我需要这样的东西:
template <typename T>
struct Colordata
{
public:
T dataFirst;
T dataLast;
template <typename... Ta>
Colordata(Ta... args)
{
constexpr std::size_t n = sizeof...(Ta);
std::cout << n << std::endl;
dataFirst = (args..)[0];
dataLast = (args...)[n - 1];
return;
}
};
int main(int argc, char const *argv[])
{
auto a = Colordata<float>(1.0f, 2.2f, 3.3f, 4.3f, 5.5f);
return 0;
}
我尝试使用可变参数作为 T args, ... 并使用来自 stdarg.h 的函数,但我无法获得参数的数量。
【问题讨论】:
-
变量包不能像数组一样被索引。但是,您可以提取特定元素,尽管它需要一些模板工作,因为您需要扩展可变参数包并检索第 N 个条目
-
从您的类的编写方式来看,您似乎只想获取可变参数包的第一个和最后一个元素。如果是这样,请编辑您的问题以准确地说出来。在这种情况下,将参数放入数组是一个 XY 问题。
-
另请注意,一个包的每个参数可以有不同的类型。当您执行
Colordata<float>时,您只是在指定第一个参数的类型。其余的由编译器推导出来。在这种情况下,它们都是floats。 -
我认为 OP 真正需要的是
std::initializer_list<float>,而不是可变参数数组......但由于不清楚他们在做什么,所以很难给出好的建议。