Lut_99 と同様のことを行います (ただし、少し異なります)。
namespace choice_ns {
enum Choice { rock, paper, scissors };
}
using choice_ns::Choice;
bool beats(Choice a, Choice b) {
using namespace choice_ns;
switch (a) {
case rock:
// etc...
}
void does_not_compile() {
rock; // This requires qualification.
}
enum class
は使用されていませんが、同様の効果が得られることに注意してchoice_ns::
くださいrock
。これにより、 の主なポイントである外側の名前空間の汚染が回避されますenum class
。また、 のように、接頭辞なしでenum class
参照できることにも注意してください。Choice
choice_ns::
using namespace ...
名前空間の名前は意図的にぎこちなくしています。名前空間が必要になるのは、関数の最初で言うときだけだからです。
これと Lut_99 が示唆することとの違いの 1 つは、Lut_99 の方法で行うと、宣言が次のようになることです。
choice::type a;
これは、私の方法に比べて冗長で厄介です。
Choice a;
他の提案のいくつかは、
constexpr SomeType rock = whatever::rock;
しかし、これは本当に良いことではありません。なぜなら、特に後で値を追加することにした場合は、間違いを犯す可能性が高いからです。例https://www.youtube.com/watch?v=Kov2G0GouBw
しばらくこれが欲しかった。それほど遠くない将来にこれが可能になることを Baptistou から見てうれしいです。それまでの間、現在利用可能なテクノロジーを使用して、非常によく似たものを手に入れることができます.