Я хочу иметь подчиненное состояние, которое для события будет завершено и возвращается в основное состояние. Я понятия не имею, как это можно смоделировать с помощью 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?
Задача ещё не решена.
Других решений пока нет …