【发布时间】:2016-08-04 22:46:41
【问题描述】:
在编写简单的状态机时,您通常有一个总顺序,例如:
State {
initial,
connecting,
established,
ready,
closed,
failed
}
您可以轻松测试给定值的等价性:
if (state == State::established)
但是如果你的状态是ready——这个测试会失败,即使准备好意味着建立?另一种方法是添加另一个子句,但如果列表更长,或者要求不断变化,这可能会变得更长。
if (state == State::established || state == State::ready || ...)
使用 C 风格的枚举,您甚至可以通过转换为整数来确定相对顺序:
if (state > State::established && state <= State::closed)
但是如果你想享受类型安全枚举类,除了添加 operator
【问题讨论】:
-
欢迎来到 StackOverflow。您遇到的实际问题是什么?请提供Minimal, Complete, and Verifiable example 并更详细地解释问题。
-
您是在问如何为 C++11 范围的枚举实现
operator<和operator>? -
是的!对不起,如果原来的措辞很差。第一个计时器。
-
您可以考虑将该措辞添加到问题中。我认为它非常清晰和直接。
-
您最好的选择可能是使用位掩码或创建一个专用的 State 类来处理这个问题,而不是试图将作用域枚举破解成它不是的东西。无论如何,对枚举使用数值比较可能是一种非常糟糕的形式,因为枚举旨在唯一地标识一个命名值,仅此而已。