Я хочу создать следующий конечный автомат с Boost MSM:
Я хотел бы иметь возможность предотвратить событие Error
для запуска перехода AllOk + Error == InError
, если ортогональное состояние находится на «B». Например, было бы неплохо указать переход для всех ортогональных состояний. Что-то типа:
{AllOk, B} + Error == {AllOk, A}
Однако я не могу найти, как это сделать ни с Boost MSM, ни с обычной номенклатурой UML, что заставляет меня думать, что я иду неправильным путем.
Существует ли классическая «идиоматика UML» для такого поведения?
Я вижу два возможных решения:
- Установите защиту на
AllOk + Error == InError
, которая проверяет, является ли другое состояниеB
, как этот ответ. - Отправить более конкретную ошибку (в моем случае
CouldNotComputePath
, так как я программирую робота), и как-то преобразовать ее вError
, если она не обрабатывается. Я не совсем уверен, как это сделать.