如何将可变模板参数分配给 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;
}

Demo

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)... };
 }