Как предотвратить переход ортогональной области для обработки ошибок - PullRequest
1 голос
/ 04 мая 2020

Я хочу создать следующий конечный автомат с Boost MSM:

Simplified FSM with error states in an orthogonal region

Я хотел бы иметь возможность предотвратить событие Error инициировать переход AllOk + Error == InError, если ортогональное состояние находится на «B». Например, было бы неплохо указать переход для всех ортогональных состояний. Что-то вроде:

{AllOk, B} + Error == {AllOk, A}

Однако я не могу найти, как это сделать с Boost MSM, ни с обычной UML-номенклатурой, что заставляет меня думать, что я иду не в ту сторону.

Есть ли класс c "UML idiomati c" для обработки такого рода поведения?

Я вижу два возможных решения:

  • Установить защиту на AllOk + Error == InError, которая проверяет, если другое состояние B, как этот ответ .
  • Отправить более конкретную ошибку c (в моем случае, CouldNotComputePath, так как я программирую робота), и каким-то образом преобразовать его в Error, если он не обработан. Я не совсем уверен, как это сделать.
...