A std::array
не может быть построено из std::initializer_list
. У вас есть два варианта исправить это, если вы хотите сохранить std::array
член. Вы можете сделать vec
и агрегировать, сделав arr
publi c и удалив конструктор, например
#include<array>
template<class T,size_t D>
class vec{
public:
std::array<T,D> arr;
};
int main()
{
vec<int,3> v = {1,2,3};
}
, или оставьте его как есть, но вместо этого вы итерируете по arr
и назначаете его значения из списка инициализатора. Это выглядело бы как
#include<array>
template<class T,size_t D>
class vec{
private:
std::array<T,D> arr;
public:
vec(std::initializer_list<T> l)
{
std::copy_n(l.begin(), std::min(l.size(), arr.size()), arr.begin());
}
};
int main()
{
vec<int,3> v = {1,2,3};
}
Этот метод требует, чтобы члены массива были конструируемыми по умолчанию. Если вы не можете / не хотите гарантировать, что вам нужен первый вариант или переключитесь на использование другого типа для arr
, например std::vector
.