对于有Boost MSM经验的人来说,这是一个问题。 我有一个用Boost MSM实现的非常大的状态机,最后我跑出了50的向量限制(有太多的事件进入我的状态机,这是无法避免的)。我已经创建了更高的矢量标题(vector60,vector70等)但我想整体压缩我的状态机。
问题是,MSM是否支持分层状态机。例如(如果我错了,请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将被转发到当前状态的父状态&等等。
作为减少转换表大小的一部分,我希望创建一个父状态,其中将处理具有公共处理程序的事件,从而减少转换表大小。
任何建议/意见表示赞赏。
由于
答案 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状态机图和完整代码。