2015-08-29 41 views
1

我想要的是通过大括号初始化程序列表生成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> >&’ 

所以我怎样才能解决这个问题?

回答

2

您应该能够使用的范围内构造:

Matrix5T(std::initializer_list<std::initializer_list<MyListType>> matrixIn) 
    : matrix(std::make_shared<std::vector<std::vector<MyListType>>>(matrixIn.begin(), 
                    matrixIn.end())) {}