Как я могу повторно использовать код, необходимый для «составного состояния», которое реплицируется в разных частях state_machine (как показано на рисунке ниже)?
Примечание: я использую Boost.MSM
Сейчас я должен повторить код в состояниях 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 >
> {};
Реальное составное состояние более сложный и включает в себя гораздо больше кода.
Как избежать дублирования кода со всеми проблемами, возникающими при разработке / обслуживании?