【问题标题】:Hierarchical state machine with Boost MSM带有 Boost MSM 的分层状态机
【发布时间】:2017-01-06 01:13:58
【问题描述】:

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

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

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

任何建议/cmets 表示赞赏。

谢谢

【问题讨论】:

标签: c++ boost-msm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多