Повысить МСМ, как определить переход между двумя подсостояниями?

Я использую библиотеку Boost 1.64.0 MSM для создания иерархического конечного автомата. Для проверки механизма перехода я реализую конечный автомат, как этот

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

Итак, как определить переход от S11 к S21, в соответствии с той же ситуацией, описанной в вики, последовательность выполнения перехода должна быть "exit S11" -> "exit S1" -> "enter S2" -> "enter S21".

1 ответ

Согласно документу https://www.boost.org/doc/libs/1_66_0/libs/msm/doc/HTML/ch03s02.html,

  • возможно только явно ввести подсостояние цели, но не подсостояние.
  • невозможно явно выйти. Точки выхода должны быть использованы.

Таким образом, вы не можете сделать явный выход из S11.

Вы можете использовать псевдо-состояние точки выхода вместо явного выхода. И я рекомендую использовать псевдосостояние точки входа вместо явной записи.

Вот пример кода точки входа псевдосостояния

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

и точка выхода псевдо-состояния.

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

Другие вопросы по тегам