私はこのような列挙型クラスを持っています:
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
へのキャストが必要なのですか?
これは、「列挙型クラス」が「強く型付けされている」ため、暗黙的に他の型に変換できないためです。 http://en.wikipedia.org/wiki/C%2B%2B11#Strongly_typed_enumerations
C++ 11 強く型付けされた列挙型 は、設計上、暗黙的に整数型に変換できないためです。基になる型がunsigned int
であるという事実は、列挙型の型がunsigned int
であることを意味するわけではありません。 BinaryInstructions
です。
しかし、とにかく実際には変換は必要ありませんarg
はunsignedintであるため、キャストが必要ですが、わかりやすくするためにstatic_cast
を選択する必要があります。
switch(arg)
{
case static_cast<unsigned int>(BinaryInstructions::END_INSTRUCTION) :
return "end";
break;
}