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;
}