具有Boost MSM的分层状态机

Hierarchical state machine with Boost MSM

本文关键字:分层 状态机 MSM Boost 具有      更新时间:2023-10-16

这里有一个问题给那些有Boost MSM经验的人。我有一个用Boost MSM实现的非常大的状态机,最后今天我用光了向量限制50(有太多的事件进入我的状态机,这是无法避免的)。我已经创建了更高的矢量标头(vector60, vector70等),但我想压缩我的状态机作为一个整体。

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

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

欢迎任何建议/评论。

谢谢

是的,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状态机图和完整的代码。