如何防止错误处理的正交区域转换

How to prevent orthogonal region transition for error handling

我想使用 Boost MSM 创建以下状态机:

如果正交状态处于 "B",我希望能够阻止 Error 事件触发 AllOk + Error == InError 转换。例如,为所有正交状态指定转换会很好。类似于:

{AllOk, B} + Error == {AllOk, A}

但是,我找不到如何使用 Boost MSM 来实现它,也找不到使用常规 UML 命名法的方法,这让我觉得我走错了路。

是否有经典的"UML idiomatic"来处理这种行为?

我看到两个可能的解决方案:

好的,我找到了解决方案:

Error事件可以在MainStateMachine中"catched"。如果不是,则在 MainStateMachine 上触发内部转换,这将发送 EnterError 事件以使另一个正交状态切换到 InError.