std::array 的转发列表初始化的可变参数模板

variadic template for forward list initialization of std::array

我有一个几何结构来描述 N 维中的一个点

template <typename T, std::size_t N>
class point : public std::array<T, N>

在我想添加到此 class 的众多构造函数/方法中,我不知道如何构建可变参数构造函数。我试过了

template<typename ...Args>
point(Args&&...t) : std::array<T,N>(std::forward<Args>(t)...)
{
}

但这不起作用

std::array<int,5> p1 = {0, 1, 1, 2, 3}; // OK
point<int,5>      p2 = {0, 1, 1, 2, 3}; // ERROR

如何定义这样的构造函数?

此行为来自 std::array 的特殊性。作为没有通用构造函数的聚合意味着您无法使用 std::forwardstd::initializer_list

对其进行初始化

On 应该像这样使用双大括号:

template<typename ...Args>
point(Args&&... args) : std::array<T,N>{{args...}}