Повысить МСМ, как определить переход между двумя подсостояниями?
Я использую библиотеку 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
и точка выхода псевдо-состояния.