Как получить доступ к элементам конечного автомата из подгосударственного автомата?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как получить доступ к элементам конечного автомата из подгосударственного автомата?

Сообщение Anonymous »

Я использую boost::msm для управления состоянием в приложении робототехники. У меня есть внешний конечный автомат, который управляет основным потоком и включает в себя такие состояния, как «Простой», «Работа» и «Ошибка». Рабочее состояние само по себе является внутренним конечным автоматом с несколькими подсостояниями.
У меня есть метод во внешнем конечном автомате, который устанавливает объект контекста (TrajectoryManagerComponent* m_comComponent). К этому объекту должен быть доступен внутренний конечный автомат, чтобы действия внутри подсостояний могли вызывать его методы.
Проблема: я не могу передать контекст непосредственно конструктору. внутреннего автомата, потому что я не создаю экземпляр внутреннего автомата напрямую — им управляет boost::msm. Вот упрощенная версия моего текущего кода:

Код: Выделить всё

struct ComponentStateMachine_ : public msm::front::state_machine_def
{
public:
TrajectoryManagerComponent* m_component;

void link_component(hyro::guidance::TrajectoryManagerComponent* component) { m_component = component; }

struct Operating_ : public msm::front::state_machine_def
{
template 
void on_entry(Event const&, SM& fsm)
{
m_logger->info("Accessing component, we might now use its methods. Component is {}", **fsm.m_component**);

Как лучше всего получить доступ к контексту (m_comComponent) из внешнего конечного автомата в действиях или состояниях внутреннего конечного автомата? Я думал передать его через конструктор, но поскольку внутренний конечный автомат создается с помощью boost::msm, у меня нет прямого контроля над его созданием.
Есть ли способ добиться этого в Boost.MSM, или существует альтернативный шаблон, который позволил бы мне получить доступ к контексту из внутреннего автомата?

Подробнее здесь: https://stackoverflow.com/questions/791 ... te-machine
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Код C++ для конечного автомата
    Гость » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Код C++ для конечного автомата
    Гость » » в форуме C++
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • Сколько раз MoveNext() выполняется в C# в ожидании конечного автомата?
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Обработчик неисправности конечного автомата Masstransit не запущен
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Обработчик неисправности конечного автомата Masstransit не запущен
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»