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条件は、整数型列挙型、または整数型または列挙型への1つの非明示的な変換関数が存在するクラス型(12.3)でなければなりません。
enumeration typeには強く型付けされたenumが含まれていますか、またはswitch
への明示的な変換が必要なため、int
ステートメントと互換性がありませんか?
列挙型は、強く型付けされているかどうかにかかわらず、依然として列挙型であり、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」です。