如何将可变模板参数分配给 std::array
How to assign variadic template arguments to std::array
我有一个 std::array
并且我有一个可变参数模板函数,其参数数量与数组的大小相匹配。我需要将参数分配给数组的元素。换句话说,在下面的代码中,我希望 a
获得值 {1, 2, 3}
和 b
获得值 {1, 2, 3, 4, 5}
std::array<int, 3> a;
std::array<int, 5> b;
assign_values(a, 1, 2, 3);
assign_values(b, 1, 2, 3, 4, 5);
问题是如何实现 assign_values
可变模板函数。
我受限于 C++14 版本。
更新:
参数可以是不同的类型:assign_values(b, 1, 2u, 3., '4', 5l);
像这样:
template<class T, size_t N, class ... Values>
void assign_values(std::array<T,N>& arr, Values... vals) {
static_assert(N == sizeof...(vals));
int j = 0;
for (auto i : std::initializer_list< std::common_type_t<Values...> >{vals...})
arr[j++] = i;
}
I'm limited with the C++14 version
未使用的数组初始化(模板折叠的 C++17 之前的代理项)的老技巧应该有效(也适用于 C++11)
template <typename T, std::size_t N, typename ... Values>
void assign_values (std::array<T,N> & arr, Values... vals)
{
static_assert(N == sizeof...(vals));
using unused = int[];
int j = 0;
(void)unused { 0, (arr[j++] = vals, 0)... };
}
我有一个 std::array
并且我有一个可变参数模板函数,其参数数量与数组的大小相匹配。我需要将参数分配给数组的元素。换句话说,在下面的代码中,我希望 a
获得值 {1, 2, 3}
和 b
获得值 {1, 2, 3, 4, 5}
std::array<int, 3> a;
std::array<int, 5> b;
assign_values(a, 1, 2, 3);
assign_values(b, 1, 2, 3, 4, 5);
问题是如何实现 assign_values
可变模板函数。
我受限于 C++14 版本。
更新:
参数可以是不同的类型:assign_values(b, 1, 2u, 3., '4', 5l);
像这样:
template<class T, size_t N, class ... Values>
void assign_values(std::array<T,N>& arr, Values... vals) {
static_assert(N == sizeof...(vals));
int j = 0;
for (auto i : std::initializer_list< std::common_type_t<Values...> >{vals...})
arr[j++] = i;
}
I'm limited with the C++14 version
未使用的数组初始化(模板折叠的 C++17 之前的代理项)的老技巧应该有效(也适用于 C++11)
template <typename T, std::size_t N, typename ... Values>
void assign_values (std::array<T,N> & arr, Values... vals)
{
static_assert(N == sizeof...(vals));
using unused = int[];
int j = 0;
(void)unused { 0, (arr[j++] = vals, 0)... };
}