带有 Boost MSM 的分层状态机
Hierarchical state machine with Boost MSM
这里有一个问题想问那些使用过 Boost MSM 的人。
我有一个用 Boost MSM 实现的非常大的状态机,今天我终于 运行 超出了 50 的矢量限制(有太多事件进入我的状态机,这是无法避免的)。我创建了更高的矢量 headers(vector60、vector70 等),但我想将我的状态机作为一个整体进行压缩。
问题是,MSM 是否支持分层状态机。例如(如果我错了请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将转发到当前状态的 parent 状态等。
作为减少 t运行sition table 大小的一部分,我希望创建一个 parent 状态,在该状态中将处理具有公共处理程序的事件,从而减少 t运行尺寸table尺寸。
任何advise/comments赞赏。
谢谢
是的,Boost.MSM 支持分层状态机。分层状态机称为 "sub machine state"。它是 UML 术语,Boost.MSM 也使用它。
这是一个子机状态的例子:
http://redboltz.wikidot.com/sub-machine-state
从父状态机到子状态机的转换,可以使用入口点伪状态。参见 http://redboltz.wikidot.com/entry-point-pseudo-state
从子状态机到父状态机的转换,可以使用出口点伪状态。参见 http://redboltz.wikidot.com/exit-point-pseudo-state
事件从最内层状态到最外层状态进行评估。所以你可以在父状态机上编写公共转换。这是一个实际的小例子:
http://redboltz.wikidot.com/practical-sub-machine-example
所有示例均包含 UML 状态机图和完整代码。
这里有一个问题想问那些使用过 Boost MSM 的人。 我有一个用 Boost MSM 实现的非常大的状态机,今天我终于 运行 超出了 50 的矢量限制(有太多事件进入我的状态机,这是无法避免的)。我创建了更高的矢量 headers(vector60、vector70 等),但我想将我的状态机作为一个整体进行压缩。
问题是,MSM 是否支持分层状态机。例如(如果我错了请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将转发到当前状态的 parent 状态等。
作为减少 t运行sition table 大小的一部分,我希望创建一个 parent 状态,在该状态中将处理具有公共处理程序的事件,从而减少 t运行尺寸table尺寸。
任何advise/comments赞赏。
谢谢
是的,Boost.MSM 支持分层状态机。分层状态机称为 "sub machine state"。它是 UML 术语,Boost.MSM 也使用它。
这是一个子机状态的例子: http://redboltz.wikidot.com/sub-machine-state
从父状态机到子状态机的转换,可以使用入口点伪状态。参见 http://redboltz.wikidot.com/entry-point-pseudo-state
从子状态机到父状态机的转换,可以使用出口点伪状态。参见 http://redboltz.wikidot.com/exit-point-pseudo-state
事件从最内层状态到最外层状态进行评估。所以你可以在父状态机上编写公共转换。这是一个实际的小例子: http://redboltz.wikidot.com/practical-sub-machine-example
所有示例均包含 UML 状态机图和完整代码。