Ошибка компилятора возникает, когда я пытаюсь скомпилировать следующий код:
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){}
Но без сигары … Заранее спасибо,
Основанный на диапазоне цикл for нуждается в коллекции, такой как массив или вектор. Класс enum не является коллекцией.
Тем не менее, это C ++, так что есть обходной путь. Увидеть: Разрешить для Range-Based For с перечислением классов?
Циклы for на основе диапазона — это механизм для простой итерации по списку элементов. «Список элементов» может быть простым массивом или экземпляром класса, который реализует begin
а также end
методы, возвращающие тип итератора.
Пример:
int arr[] = { 1, 2, 3, 4 };
for (int cur : arr)
std::cout << cur << std::endl;