切换枚举类的非枚举值

时间:2021-02-20 09:14:53

标签: c++ enums

在 C++ 中,允许具有不对应于任何枚举器的枚举类型的值,只要它们在范围内:

enum class E { X = 1, Y = 2 };

E z = static_cast<E>(0);

这样的值可以切换吗?也就是说,

void f(E a) {
    switch(a) {
    case E::X:  // something
    case E::Y:  // something else
    // somehow check if it's the same as z
    default:    // something else again
    }
}

我希望不是,但想确认一下,如果是,我会很高兴。

我所知道的不令人满意的选择:

switch(static_cast<int>(a)) {
case 1:  // something
case 2:  // something else
case 0:  // the z case
default: // something else again
}

if (a == E::X) {
    // something
} else if (a == E::Y) {
    // something else
} else if (static_cast<int>(a) == 0)
    // the z case
} else {
    // something else again
}

1 个答案:

答案 0 :(得分:1)

应该这样做:

enum class E { X = 1, Y = 2 };

constexpr E z = static_cast<E>(0);

void f(E a) {
  switch (a) {
    case E::X:  // ...
    case E::Y:  // ...
    case z:     // ...
    default:    // ...
  };
}