具有Boost MSM的分层状态机

时间:2016-08-29 22:00:40

标签: c++ boost-msm

对于有Boost MSM经验的人来说,这是一个问题。 我有一个用Boost MSM实现的非常大的状态机,最后我跑出了50的向量限制(有太多的事件进入我的状态机,这是无法避免的)。我已经创建了更高的矢量标题(vector60,vector70等)但我想整体压缩我的状态机。

问题是,MSM是否支持分层状态机。例如(如果我错了,请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将被转发到当前状态的父状态&等等。

作为减少转换表大小的一部分,我希望创建一个父状态,其中将处理具有公共处理程序的事件,从而减少转换表大小。

任何建议/意见表示赞赏。

由于

1 个答案:

答案 0 :(得分:4)

是的,Boost.MSM支持分层状态机。分层状态机称为“子机状态”。它是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状态机图和完整代码。