Enum Class "не удалось преобразовать в unsigned int"
у меня есть класс 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
?
2 ответов
Это потому, что" класс перечисления "является" строго типизированным", поэтому неявно конвертируемым в любой другой тип. http://en.wikipedia.org/wiki/C%2B%2B11#Strongly_typed_enumerations
Потому Что C++11 строго типизированные перечисления неявно конвертируются в интегральные типы по дизайну. Тот факт, что базовый тип unsigned int
не означает, что тип перечисления unsigned int
. Это BinaryInstructions
.
но вы на самом деле не нужно преобразование в любом случае С arg
является unsigned int, вам нужен бросок, но вы должны предпочесть static_cast
для ясности:
switch(arg)
{
case static_cast<unsigned int>(BinaryInstructions::END_INSTRUCTION) :
return "end";
break;
}