Enum Class & quot; не удалось преобразовать в unsigned int & quot;

У меня есть класс enum, как это:

    typedef unsigned int binary_instructions_t;

enum class BinaryInstructions : binary_instructions_t
{
END_INSTRUCTION = 0x0,

RESET,

SET_STEP_TIME,
SET_STOP_TIME,
START,

ADD
};

И я пытаюсь использовать члены перечисления в выражении switch следующим образом:

const std::string& function(binary_instructions_t arg, bool& error_detect)
{
switch(arg)
{
case (unsigned int)BinaryInstructions::END_INSTRUCTION:
return "end";
break;
}
translate_error = true;
return "ERROR";
}

Почему бросок к (unsigned int) требуется, когда базовый тип уже unsigned int?

10

Решение

Это потому, что «enum class» является «строго типизированным», поэтому неявно преобразуется в любой другой тип. http://en.wikipedia.org/wiki/C%2B%2B11#Strongly_typed_enumerations

12

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

Потому что C ++ 11 строго типизированные перечисления неявно преобразуются в целочисленные типы по замыслу. Тот факт, что базовый тип является unsigned int не означает, что тип перечисления unsigned int, это BinaryInstructions,

Но вам все равно не нужно преобразование поскольку arg является неподписанным int, вам нужен приведение, но вы должны предпочесть static_cast для ясности:

switch(arg)
{
case static_cast<unsigned int>(BinaryInstructions::END_INSTRUCTION) :
return "end";
break;
}
10

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