我有一个描述N维点
的几何结构template <typename T, std::size_t N>
class point : public std::array<T, N>
在我想要添加到这个类的众多构造函数/方法中,我无法弄清楚如何构建一个可变参数构造函数。我试过了
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
我该如何定义这样的构造函数?
答案 0 :(得分:2)
此行为来自std::array
的特异性。成为没有通用构造函数的agregate意味着您无法使用std::forward
或std::initializer_list
应该使用像这样的双括号:
template<typename ...Args>
point(Args&&... args) : std::array<T,N>{{args...}}