enum class
をオンにすると、すべての場合にenum class
を再入力する必要があります。 constexpr
の外にあるので、このバグは私が他に何を意味するのか想像するのは難しいです。コンパイラにブロック内のすべてが一致するものがあれば私の選択したenum class
に解決されるべきであることを通知することはありませんか?enumクラスを切り替えるときに繰り返しを削除します
コンパイルスニペットを含む次の例を考えてみましょう。またコンパイルのために、コンパイルしないスニペット(コメントアウト)を記述したいと思います。
#include <iostream>
enum class State : std::uint8_t;
void writeline(const char * msg);
void Compiles(State some);
enum class State : std::uint8_t
{
zero = 0,
one = 1
};
int main()
{
Compiles(State::zero);
return 0;
}
void Compiles(State some)
{
switch (some)
{
case State::zero: //State::
writeline("0");
break;
case State::one: //State::
writeline("1");
break;
default:
writeline("d");
break;
}
}
//void WhatIWant(State some)
//{
// using State{ //this makes no sense to the compiler but it expresses what I want to write
// switch (some)
// {
// case zero: //I want the compiler to figure out State::zero
// writeline("0");
// break;
// case one: //I want the compiler to figure out State::one
// writeline("1");
// break;
// default:
// writeline("d");
// break;
// }
// }
//}
void writeline(const char * msg)
{
std::cout << msg << std::endl;
}
多分一度ヒントを与えた後、enum class
からコンパイラフィギュアをswitchステートメントを使用して持っている方法はありますか?
古いスタイル(非クラス)の列挙型を使用しない限り、私はあなたが望むとは思えません。 enumクラスの利点の1つは、すべてのenum値に対して完全修飾名を使用して名前の競合を避けることです。 –
最近、誰かがこれについて最近提案しました。それは拒絶された。 –
@ T.C。その提案をどこで見つけることができますか? – Johannes