2013-02-19 3 views
4

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

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? Или я тонко неправильно понял, что диапазон, основанный на циклах, предназначен для поиска содержимого массива, а не для подобных классов перечисления?

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

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


} 

Но нет сигар ... Спасибо заранее,

ответ

8

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

Однако, это C++, поэтому есть обходное решение. См.: Allow for Range-Based For with enum classes?

+0

что сладкое! Мне нравится эта реализация. Гораздо чище, чем литье в int solution, которое я бы использовал. –

0

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

Пример:

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