У меня есть два класса, которые используют списки инициализации.Одним из них является класс в векторном стиле, содержащий список значений.
Vec.h:
template< typename T, int nDimensions = 2 >
class Vec{
private:
std::array< T, nDimensions > elements_;
public:
template <typename... U>
Vec(U... ts) : elements_{ ts... } {}
}
Тогда при использовании:
typedef Vec< int, 2 > Vec2i;
Vec2i twoi = { 1,2 };
Vec2i twoi2 = twoi; //I have copy constructor and other methods finished.
Этот класс работает нормальнои, конечно же, когда я пытаюсь использовать этот класс с моим классом в стиле Matrix, я не могу понять правильный синтаксис его конструктора.
template< typename T, int X,int Y>
class Mat {
private:
std::array< Vec<T, X>, Y > elements_;
}
Я бы хотел использовать его следующим образом:
typedef Mat<int, 3,3> Mat3i;
Mat3i threemat = { {1,2,3},
{4,5,6},
{7,8,9}};
Теперь, iv попытался использовать списки инициализаторов в качестве конструктора с некоторым успехом, но я не могу понять синтаксис для передачи подсписков.
Mat(std::initializer_list<Vec<T, X>> values) {
for (auto& t : values) {
//What goes here?
}
}
Iv также пробовал перебирать список и назначатьих вручную, но это не пойдет.
Стоит также отметить, что важно, чтобы эти классы имели последовательные фрагменты памяти для списков там, и никаких других переменных.В противном случае id будет использовать другие типы вместо std :: array.(Для приведения и объединения.)
Я спорю, нужно ли мне переосмыслить приведение каждого значения как Vec, а затем скопировать значения.