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

C++ 如何防止错误处理中的正交区域转换,c++,uml,boost-msm,state-diagram,C++,Uml,Boost Msm,State Diagram,我想使用Boost MSM创建以下状态机: 如果正交状态为“B”,我希望能够防止Error事件触发AllOk+Error==InError转换。例如,为所有正交状态指定转换就很好了。比如: {AllOk, B} + Error == {AllOk, A} 然而,我找不到如何使用boostmsm,也找不到常规的UML命名法,这让我觉得我走错了方向 是否有一个经典的“UML惯用”来处理这种行为 我认为有两种可能的解决办法: 在AllOk+Error==InError上设置一个保护,检查另一个状

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

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

{AllOk, B} + Error == {AllOk, A}
然而,我找不到如何使用boostmsm,也找不到常规的UML命名法,这让我觉得我走错了方向

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

我认为有两种可能的解决办法:

  • AllOk+Error==InError
    上设置一个保护,检查另一个状态是否为
    B
  • 发送一个更具体的错误(在我的例子中,
    CouldNotComputePath
    ,因为我正在编程一个机器人),如果它没有被处理,以某种方式在
    error
    中转换它。我真的不知道怎么做
    • 好的,我找到了一个解决方案:

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

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

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