Подтвердить что ты не робот

Выводы переключателей с строго типизированными перечислениями

При использовании строго типизированных перечислений в инструкции switch есть способ избежать явного приведения в int?

/// @desc an enumeration of the states that the session can be in.
enum class State
{
    Created,    
    Connected,  
    Active,
    Closed
};

State sesState = session->GetState();

switch (static_cast<int>(sesState))
{
    case static_cast<int>(Session::State::Created):
    // do stuff.
    break;

    case static_cast<int>(Session::State::Connected):
    // do stuff.
    break;
}

Из черновика n3242:

6.4.2 Оператор switch [stmt.switch]

2 Условие должно иметь целочисленный тип, тип перечисления или тип класса, для которого существует одна неявная функция преобразования в интегральный или перечисляемый тип (12.3).

Использует ли тип перечисления строго типизированные перечисления или они несовместимы с операторами switch, потому что они требуют явного преобразования в int?

4b9b3361

Ответ 1

Тип перечисления по-прежнему является типом перечисления, даже если он строго типизирован или нет, и всегда отлично работал в операторах switch.

Смотрите эту программу, например:

#include <iostream>

enum class E
{
    A,
    B
};

int main()
{
    E e = E::A;

    switch (e)
    {
    case E::A:
        std::cout << "A\n";
        break;
    case E::B:
        std::cout << "B\n";
        break;
    }
}

Результат этого - "A".