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

c++ - 如何防止错误处理的正交区域过渡-LMLPHP

如果正交状态为“B”,我希望能够防止Error事件触发AllOk + Error == InError转换。例如,为所有正交状态指定过渡会很好。就像是:

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

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

是否有经典的“UML惯用语”来处理这种行为?

我看到两种可能的解决方案:
  • 保护AllOk + Error == InError,以检查其他状态是否为Blike this response
  • 发送一个更具体的错误(在我的情况下,我正在为机器人编程,因此是CouldNotComputePath),并且如果未处理,则以某种方式将其转换为Error。我不太确定该怎么做。
  • 最佳答案

    好的,我找到一个解决方案:

    可以在MainStateMachine中“捕获”错误事件。如果不是,则在MainStateMachine上触发内部转换,该转换将发送EnterError事件,以使另一个正交状态切换到InError。

    c++ - 如何防止错误处理的正交区域过渡-LMLPHP

    关于c++ - 如何防止错误处理的正交区域过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61593396/

    10-10 02:35