Иерархический конечный автомат с Boost MSM

Вот вопрос к тем, кто имеет опыт работы с Boost MSM.
У меня очень большой конечный автомат, реализованный с помощью Boost MSM, и, наконец, сегодня у меня кончился предел вектора 50 (на мой конечный автомат поступает слишком много событий, которых нельзя избежать). Я создал более высокие векторные заголовки (vector60, vector70 и т. Д.), Но я хотел сжать мой конечный автомат в целом.

Вопрос в том, поддерживает ли МСМ иерархические конечные автоматы. Например (поправьте меня, если я ошибаюсь), в иерархическом автомате, если событие не обрабатывается в определенном состоянии, это событие будет перенаправлено в родительское состояние текущего состояния. & скоро.

В рамках уменьшения размера таблицы переходов я надеялся создать родительское состояние, в котором будут обрабатываться события с общими обработчиками, тем самым уменьшая размер таблицы переходов.

Любые советы / комментарии приветствуются.

Спасибо

2

Решение

Да, Boost.MSM поддерживает иерархические конечные автоматы. Иерархические конечные автоматы называются «состоянием субмашины». Это термин UML, и Boost.MSM также использует его.

Вот пример состояния подчиненного компьютера:
http://redboltz.wikidot.com/sub-machine-state

Переходя от родительского конечного автомата к вспомогательному конечному автомату, вы можете использовать псевдо-состояние точки входа. Увидеть http://redboltz.wikidot.com/entry-point-pseudo-state

Переходя из вспомогательного конечного автомата в родительский конечный автомат, вы можете использовать псевдо-состояние точки выхода. Увидеть http://redboltz.wikidot.com/exit-point-pseudo-state

Событие оценивается от внутреннего состояния к внешнему состоянию. Таким образом, вы можете написать общий переход на родительский конечный автомат. Вот небольшой практический пример:
http://redboltz.wikidot.com/practical-sub-machine-example

Все примеры содержат схему конечного автомата UML и полный код.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector