как выйти из подсостояния в boost sml

Я хочу иметь подчиненное состояние, которое для события будет завершено и возвращается в основное состояние. Я понятия не имею, как это можно смоделировать с помощью Boost SML.

class Sub4
{
public:
auto operator()()
{
return sml::make_transition_table
(
// define entry functions:
"State1_sub"_s + sml::on_entry<_> / [] { std::cout << "Entry1_sub" << std::endl; }
,"State1_sub"_s + sml::on_exit<_> / [] { std::cout << "Exit1_sub" << std::endl; }

,"State2_sub"_s + sml::on_entry<_> / [] { std::cout << "Entry2_sub" << std::endl; }
,"State2_sub"_s + sml::on_exit<_> / [] { std::cout << "Exit2_sub" << std::endl; }

,*"State1_sub"_s + event<ev41> = "State2_sub"_s
,"State2_sub"_s + event<ev41> = "State1_sub"_s

,"State1_sub"_s + event<ev42> = X // Terminate the substate, but will not transit to master sm! How can I transit to the master?

);
}
};
class Master4
{
public:
auto operator()()
{
return sml::make_transition_table
(
// define entry functions:
"State1"_s + sml::on_entry<_> / [] { std::cout << "Entry1" << std::endl; }
,"State1"_s + sml::on_exit<_> / [] { std::cout << "Exit1" << std::endl; }
,"State2"_s + sml::on_entry<_> / [] { std::cout << "Entry2" << std::endl; }
,"State2"_s + sml::on_exit<_> / [] { std::cout << "Exit2" << std::endl; }

,*"State1"_s + event<ev41> = "State2"_s
,"State2"_s + event<ev41> = "State1"_s

,"State1"_s + event<ev42> = state<Sub4>

,state<Sub4> + event<ev43> = "State1"_s

);
}

};

int main()
{
sml::sm<Master4> sm{};
// go to sub4
sm.process_event( ev42{} );

// here I want to go back.
sm.process_event( ev42{} );
}

Я не хотел иметь переход на сторону мастера, которая переходит в любое другое состояние. Это хорошо работает и просто не вопрос. Мне просто нужен способ выйти из подсостояния и сделать переход в основное состояние. Возможно ли это в boost sml?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector