fir*_*ole 2 c++ multidimensional-array c++17
假设我有一堆bool[4][4]像这样的二维数组:
class A
{
public:
static const int SIZE = 4;
static constexpr bool blocks_S[SIZE][SIZE]={ {0,1,1,0},
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_SR[SIZE][SIZE] = { {1,1,0,0},
{0,1,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_L[SIZE][SIZE] = { {0,0,1,0},
{1,1,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_LR[SIZE][SIZE] = {{1,1,1,0},
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_Box[SIZE][SIZE] = {{1,1,0,0},
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_Bar[SIZE][SIZE] = {{1,1,1,1},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}};
};
Run Code Online (Sandbox Code Playgroud)
并且我想创建一个调用的数组block_types,它包含对所有这些二维数组的引用,所以我可以这样做:block_types[0]并且接收:blocks_S.我怎样才能构造这样一个数组(不使用std::vector等),应该是什么类型block_types?我试过auto,它选择了错误的类型.
auto block_types = { A::blocks_S, A::blocks_SR,
A::blocks_L, A::blocks_LR,
A::blocks_Box, A::blocks_Bar};
Run Code Online (Sandbox Code Playgroud)
数组的初始值设定项必须是元素值的支撑列表 - 这是递归应用的.初始化程序不能是另一个数组.换句话说,通过给出一个本身就是数组的初始化器,不可能初始化数组的多个元素.
如果您需要两个具有相同内容的独立数组,则必须为它们提供相同的初始化程序:例如,通过将其写出两次,或使用#define宏,或通过constexpr函数生成初始化程序.
满足您的要求:
我可以做例如:block_types [0]并收到:blocks_S
你不需要创建另一个数组; 你可以使用一个指针数组:
using row_t = const bool[A::size];
row_t *block_types[] = { A::blocks_S, A::blocks_SR,
A::blocks_L, A::blocks_LR,
A::blocks_Box, A::blocks_Bar};
Run Code Online (Sandbox Code Playgroud)
之后block_types[0]可以类似地使用A::blocks_S.