Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Почему std::vector<vector<int>> не инициализируется std::initializer_list<initializer_list<int>>

#cpp11 #vector


При написании класса матрицы решено было использовать следующий подход:  

class Matrix
{
public:
    Matrix(int _size) :m_size(_size) {};
    Matrix(std::initializer_list> _input):m_matrix(_input) {};
private:
    int m_size;
    std::vector> m_matrix;
};


Но он не рабочий, т.к. нет подходящего конструктора для вложенного вектора
Какой конструктор можно придумать что бы была возможна инициализация вида:

Matrix MyMatrix{{1,2},{3,4}};

    


Ответы

Ответ 1



Попробуйте следующий подход: Matrix(std::initializer_list> _input) : m_matrix(_input) {}; Класс std::vector имеет конструктор vector(initializer_list, const allocator_type& __a = allocator_type()) Соответственно при инстанциировании шаблона имеем следующий конструктор, принимающий список инициализации: vector(initializer_list>, const allocator_type& __a = allocator_type()) При этом initializer_list> не тождественно initializer_list>, поэтому ваш изначальный способ и не работал.

Ответ 2



Можно инициализировать член несколько иным способом, оставив прежнюю сигнатуру конструктора: #include Matrix(std::initializer_list> _input) : m_matrix(std::begin(_input), std::end(_input)) { }

Комментариев нет:

Отправить комментарий