通常,在编写简单的状态机时,您的总订单如下:
State {
initial,
connecting,
established,
ready,
closed,
failed
}
您可以轻松测试给定值的等效性:
if (state == State::established)
但是,如果您的状态已准备就绪,即使准备就绪意味着已建立,该测试也会失败?替代方法是添加另一个子句,但列表较长,或者更改要求可能会更长。
if (state == State::established || state == State::ready || ...)
使用C样式的枚举,甚至可以通过转换为整数来确定相对顺序:
if (state > State::established && state <= State::closed)
但是,如果您想享受类型安全枚举类(除了增加了operator
最佳答案
如您所知,作用域枚举提供类型安全性,因为它们不能隐式转换为整数。
但是没有什么可以阻止您将枚举转换为整数:
if ((int)state > (int)State::established && (int)state <= (int)State::closed)
您可以使用
static_cast
的C样式强制转换。