多维括号封闭的初始化列表到多向量

时间:2015-08-29 14:38:36

标签: c++ c++11 list-initialization

我想要的是通过括号封闭的初始化列表生成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 个答案:

答案 0 :(得分:2)

您应该能够使用范围构造函数:

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