Как создать массив двумерных массивов в C ++ - PullRequest
0 голосов
/ 10 февраля 2019

предположим, у меня есть набор двухмерных массивов типа 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}};  
};

, и я хочу создать массив с именем 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};

1 Ответ

0 голосов
/ 10 февраля 2019

Инициализатором для массива должен быть ограниченный список значений элементов - это применяется рекурсивно.Инициализатор не может быть другим массивом.Другими словами, невозможно инициализировать несколько элементов массива, предоставив один инициализатор, который сам по себе является массивом.

Если вам нужны два отдельных массива с одинаковым содержимым, вам придется дать им один и тот же инициализатор: например, записав его дважды, или используя макрос #define, или сгенерировав инициализатор с помощью функции constexpr.


Чтобы выполнить ваше требование:

Я могунапример, do: block_types [0] и recieve: 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};

, после чего block_types[0] можно использовать аналогично A::blocks_S.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...