Выводы переключателей с строго типизированными перечислениями
При использовании строго типизированных перечислений в инструкции 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
?
Ответы
Ответ 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".