Я хочу создать следующий конечный автомат с Boost MSM:
![Simplified FSM with error states in an orthogonal region](https://i.stack.imgur.com/jW1KV.png)
Я хотел бы иметь возможность предотвратить событие Error
инициировать переход AllOk + Error == InError
, если ортогональное состояние находится на «B». Например, было бы неплохо указать переход для всех ортогональных состояний. Что-то вроде:
{AllOk, B} + Error == {AllOk, A}
Однако я не могу найти, как это сделать с Boost MSM, ни с обычной UML-номенклатурой, что заставляет меня думать, что я иду не в ту сторону.
Есть ли класс c "UML idiomati c" для обработки такого рода поведения?
Я вижу два возможных решения:
- Установить защиту на
AllOk + Error == InError
, которая проверяет, если другое состояние B
, как этот ответ . - Отправить более конкретную ошибку c (в моем случае,
CouldNotComputePath
, так как я программирую робота), и каким-то образом преобразовать его в Error
, если он не обработан. Я не совсем уверен, как это сделать.