我想要的是通过大括号封闭的初始化列表生成 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> >&’
那么我该如何解决这个问题呢?