【发布时间】:2016-03-28 15:10:34
【问题描述】:
通过可变模板参数初始化std::array,从给定索引开始可以通过以下方式完成:
#include <array>
template <typename T, size_t N>
struct A
{
template <typename ... Ts>
A(size_t i, Ts ... vals)
{
constexpr size_t P = sizeof...(vals);
std::array<T, P> temp{ vals... };
for (size_t j = 0; j < P; ++j)
{
arr[i + j] = temp[j];
}
}
std::array<T, N> arr;
};
但是是否可以在不将参数包转换为临时元组或另一个 std::array 的情况下实现相同的功能?
【问题讨论】:
-
@Yakk:现在使用 C++ 的重点是性能。创建临时容器与此相反。它占用了不必要的空间并导致调用不必要的构造函数,可能会根据
T的内容分配大量资源。我看不出他为什么必须证明他不想将参数包转换为某种对象的理由。 -
在我看来,周一早上对复活节后的人们来说有点难。这个问题很清楚,但我看到 SO 的两个受人尊敬的成员用不相关的陈述来抨击 OP,而不是回答这个问题。
-
@NicolBolas 这些都是很好的理由。但是
std::tie是一个引用容器,其存在和大小(理论上)可以被忽略。它是一个元组。 -
@plasmacel :如果你不知道自己问题的答案(以及为什么要问你是否知道?)那么你不可能知道什么是相关的和不相关的。
-
在这一点上,如果我们所有人都重新考虑一下我们引导讨论的方式,可能会更好。 :) 不管挑剔,OP点在这一点上已经足够清楚了。关于可能的答案?
标签: c++ templates c++11 c++14 variadic-templates