-1

我正在使用 Boost 1.64.0 MSM 库来生成分层状态机。为了测试转换机制,我实现了一个这样的状态机

+------------------------------------------------+
|                       S                        |
|   +-------------+          +-------------+     |
|   |      S1     |          |      S2     |     |
|   |  +-------+  |          |  +-------+  |     |
|   |  |  S11  |  |          |  |  S21  |  |     |
|   |  +-------+  |          |  +-------+  |     |
|   +-------------+          +-------------+     |
|                                                |
+------------------------------------------------+

那么如何定义从 S11 到 S21 的转换,根据wiki 中描述的相同情况,转换执行顺序应该是 'exit S11' -> 'exit S1' -> 'enter S2' -> 'enter S21'。

4

1 回答 1

0

根据文档https://www.boost.org/doc/libs/1_66_0/libs/msm/doc/HTML/ch03s02.html#d0e875

  • 只能显式地进入目标的子状态,而不是子状态。
  • 无法显式退出。必须使用出口点。

所以你不能从 S11 显式退出。

您可以使用退出点伪状态而不是显式退出。我建议使用入口点伪状态而不是显式入口。

这是入口点伪状态的示例代码

http://redboltz.wikidot.com/entry-point-pseudo-state

和出口点伪状态。

http://redboltz.wikidot.com/exit-point-pseudo-state

于 2018-04-05T04:01:37.810 回答