Многомерный список инициализаторов в скобках
То, что я хочу, - это возможность генерировать матрицу 5x5 через заключенный в скобки список инициализаторов. Так что это может выглядеть позже так:
enum class MyListType {
EMPTY,
A
};
auto matrix = {
{MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY},
{MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A},
{MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A},
{MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A},
{MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY}
};
auto somthing = std::make_shared<Matrix5T>(matrix);
Для этого у меня теперь есть мой класс Matrix5T, который на данный момент работает только для векторов:
class Matrix5T
{
public:
Matrix5T(std::initializer_list<MyListType> matrixIn)
: matrix(std::make_shared<std::vector<MyListType> >(matrixIn))
{}
virtual ~TileMatrix() = default;
private:
std::shared_ptr<std::vector<MyListType> > matrix;
}
Так что я могу сделать следующее:
auto matrix = {
MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY,
MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A,
MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A,
MyListType::A, MyListType::A, MyListType::A, MyListType::A, MyListType::A,
MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY, MyListType::EMPTY
};
auto somthing = std::make_shared<Matrix5T>(matrix);
В настоящее время я не могу найти решение, чтобы многомерный вектор в моем классе инициализировался многомерным списком инициализаторов в скобках.
Я пробовал, например, следующее, что приводит к ошибкам:
class Matrix5T
{
public:
Matrix5T(std::initializer_list<std::initializer_list<MyListType> > matrixIn)
: matrix(std::make_shared<std::vector<std::vector<MyListType> > >(matrixIn))
{}
virtual ~TileMatrix() = default;
private:
std::shared_ptr<std::vector<std::vector<MyListType> > > matrix;
}
Ошибка говорит, что преобразование из списка инициализатора в многомерный вектор не работает:
no known conversion for argument 1 from ‘std::initializer_list<std::initializer_list<MyListType> >’ to ‘const std::vector<std::vector<MyListType> >&’
Так как я могу это исправить?
1 ответ
Решение
Вы должны быть в состоянии использовать конструктор диапазона:
Matrix5T(std::initializer_list<std::initializer_list<MyListType>> matrixIn)
: matrix(std::make_shared<std::vector<std::vector<MyListType>>>(matrixIn.begin(),
matrixIn.end())) {}