【发布时间】:2014-10-20 08:08:45
【问题描述】:
我正在使用 c++ 中的协议设计代码,需要有关状态机设计的帮助。
我们拥有的所有状态机都具有相同的性质。每个状态机都有特定的状态(S1、S2 等),每个状态只能接受特定类型的事件(E1、E2 等)。根据事件处理的结果,机器进入下一个状态。
例如,从状态 S1 和事件 E1,机器可以移动到 S2 或 S3。我研究了状态设计模式,但它建议所有状态(派生状态类)都应该实现状态机可以执行的所有动作,或者基状态类应该实现这些动作。在我的情况下,单个状态只能处理某些事件,因此我认为状态设计模式不适用。
您能否建议实施此类机器的最佳方式/模式。
【问题讨论】:
-
那么当您处于状态
S1并且您收到未处理的事件E62时会发生什么? -
这个问题似乎离题了,因为它是关于软件设计的,这在programmers.stackexchange.com上会更好
-
你看过Boost Statechart吗?不确定它是否正是您需要/想要的,但它可能有用。
-
@sharth 如果我在状态 S1 中收到一个事件 E62,而 S1 并不意味着处理 E62,那么这意味着该事件已被错误地生成,我们将丢弃该事件并简单地记录一个错误。跨度>
-
状态机没什么大不了的。如果它们很少更改,您可以利用每个状态机对应一个正则表达式,每个正则表达式对应一个简单的结构化程序(带有 if 和 while)这一事实。
标签: c++ design-patterns state-machine