Как передать объекты состояниям в boost :: statechart? - PullRequest
3 голосов
/ 10 февраля 2011

Я нахожусь в ситуации, когда мне нужно изменить конечный автомат, который я не написал. Этот конечный автомат написан с использованием Boost Statechart . К сожалению, я нахожу этот код непроницаемым, и парень, который написал пишет, что он в отпуске.

Проблема проста, я думаю: у меня есть переменная thing, которую я хочу использовать в некоторых из этих состояний. Он представляет собой отдельный контроллер приложения, который должен быть проинформирован о вещах. Какому конструктору (или какому-либо другому) я могу дать thing, сделав его доступным для состояний машины?

Состояния объявлены согласно этому примеру:

struct Pumping : sc::state< Pumping, Purifier >
{
  Pumping( my_context ctx ) : my_base( ctx )
  {
    post_event( EvPumpingStarted() );
  }
  // ...
};

P.S. Я хотел бы лучшего названия для этого вопроса; помощь оценена.

1 Ответ

5 голосов
/ 14 февраля 2011

Похоже, что вещь должна быть передана конструктору машины? Если так, то, вероятно, лучше сделать его членом данных машины. Состояния могут получить доступ к машине с помощью функции externalmost_context (). Таким образом, внутри состояния вы должны написать что-то вроде outermost_context (). Get_thing ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...