Как повторно использовать «составное состояние» в Boost.MSM? - PullRequest
0 голосов
/ 08 апреля 2020

Как я могу повторно использовать код, необходимый для «составного состояния», которое реплицируется в разных частях state_machine (как показано на рисунке ниже)?

Примечание: я использую Boost.MSM

enter image description here

Сейчас я должен повторить код в состояниях S1 и S23

struct S_A:msmf::state<> {
    // Entry action
    template <class Event,class Fsm>
     void on_entry(Event const&, Fsm&) const {std::cout << "StateA::on_entry()" << std::endl;}
    // Exit action
     template <class Event,class Fsm>
     void on_exit(Event const&, Fsm&) const {std::cout << "StateA::on_exit()" << std::endl;}
};
struct S_B:msmf::state<> {/* ... */}
struct S_C:msmf::state<> {/* ... */}

// Set initial state
typedef S_A initial_state;

// Transition table
struct transition_table:mpl::vector<
  //          Start  Event   Next   Action      Guard
  msmf::Row< S_A  , Ev_ab  ,S_B  , msmf::none, msmf::none>,
  msmf::Row< S_B  , Ev_bc  ,S_C  , msmf::none, msmf::none>,
  msmf::Row< S_C  , Ev_ca  ,S_A  , msmf::none, msmf::none >
> {};

Реальное составное состояние более сложный и включает в себя гораздо больше кода.

Как избежать дублирования кода со всеми проблемами, возникающими при разработке / обслуживании?

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