Непонимание диапазона на основе цикла?

Ошибка компилятора возникает, когда я пытаюсь скомпилировать следующий код:

for(binary_instructions_t &inst: BinaryInstructions){}

BinaryInstructions это перечислимый класс:

typedef unsigned int binary_instructions_t;

enum class BinaryInstructions : binary_instructions_t
{
END_OF_LAST_INSTR = 0x0,

RESET,
SETSTEP,
START,
STOP,

ADD,
REMOVE,
};

Должен ли я позволить «сделать» диапазон, основанный на цикле, используя элементы внутри класса enum? Или я не совсем понял, что диапазон, основанный на циклах, предназначен для поиска в массиве, а не в вещах, подобных классам enum?

Я также попытался: Создание экземпляра и поиск в этом экземпляре:

BinaryInstructions bsInstance;
for(binary_instructions_t &inst : bsInstance){}

Но без сигары … Заранее спасибо,

4

Решение

Основанный на диапазоне цикл for нуждается в коллекции, такой как массив или вектор. Класс enum не является коллекцией.

Тем не менее, это C ++, так что есть обходной путь. Увидеть: Разрешить для Range-Based For с перечислением классов?

8

Другие решения

Циклы for на основе диапазона — это механизм для простой итерации по списку элементов. «Список элементов» может быть простым массивом или экземпляром класса, который реализует beginа также end методы, возвращающие тип итератора.

Пример:

int arr[] = { 1, 2, 3, 4 };
for (int cur : arr)
std::cout << cur << std::endl;
0

По вопросам рекламы [email protected]