【发布时间】:2020-05-04 13:29:14
【问题描述】:
我想使用 Boost MSM 创建以下状态机:
如果正交状态为“B”,我希望能够阻止Error 事件触发AllOk + Error == InError 转换。例如,为所有正交状态指定转换会很好。比如:
{AllOk, B} + Error == {AllOk, A}
但是,我找不到使用 Boost MSM 的方法,也找不到常规的 UML 命名法,这让我觉得我走错了路。
是否有经典的“UML 惯用语”来处理这种行为?
我看到了两种可能的解决方案:
- 在
AllOk + Error == InError上设置一个守卫,检查其他状态是否为B、like this response。 - 发送一个更具体的错误(在我的例子中,
CouldNotComputePath,因为我正在为机器人编程),如果没有处理,则以某种方式将其转换为Error。我不确定该怎么做。
【问题讨论】:
标签: c++ uml boost-msm state-diagram