부울 msm 1_60을 사용하여 어떻게 서브 머신의 current_state (s)를 얻을 수 있습니까? (예를 들어 두 노란색 조명 번갈아 표준 빨간색, 노란색, 초록색 및 다른) 두 가지 신호등 사이 chosing 허용 외부 상태 머신 기술에 다음 코드를 고려부스트 상태에 액세스하기위한 부스트 msm 서브 시스템 current_state
class SMBigMom : public msmf::state_machine_def<SMBigMom>
{
public:
SMBigMom() {};
using initial_state = SMSelectorState;
class SMLightBase : public msmf::state_machine_def<SMLightBase>
{
public:
SMLightBase() {};
using initial_state = BaseState;
struct transition_table : mpl::vector<> {};
};
using SMBaseBackend = msm::back::state_machine<SMLightBase>;
class SMCommonRYG : public SMLightBase
{
public:
SMCommonRYG() = default;
~SMCommonRYG() {};
using initial_state = Red; // init state
struct transition_table : mpl::vector<
// Start, Event, Target, Action, Guard
msmf::Row< Red, evNext, RedYellow, msmf::none, msmf::none >,
msmf::Row< RedYellow, evNext, Green, msmf::none, msmf::none >,
msmf::Row< Green, evNext, Yellow, msmf::none, msmf::none >,
msmf::Row< Yellow, evNext, Red, msmf::none, msmf::none >
> {};
};
using SMCommonRYGBackend = msm::back::state_machine<SMCommonRYG>;
class SMYellowAlternate : public SMLightBase
{
public:
SMYellowAlternate() = default;
~SMYellowAlternate() {};
using initial_state = Yellow; // init state
struct transition_table : mpl::vector<
// Start, Event, Target, Action, Guard
msmf::Row< Yellow, evNext, Yellow2, msmf::none, msmf::none >,
msmf::Row< Yellow2, evNext, Yellow, msmf::none, msmf::none >
> {};
};
using SMYellowAlternateBackend = msm::back::state_machine<SMYellowAlternate>;
struct transition_table : mpl::vector<
msmf::Row< SMSelectorState, evSelectCommonRYG, SMCommonRYGBackend, msmf::none, msmf::none >,
msmf::Row< SMSelectorState, evSelectYellowAlternate, SMYellowAlternateBackend, msmf::none, msmf::none >
> {};
을};
using SMBackend = msm::back::state_machine<SMBigMom>;
지금, 나는
SMBackend oSM. oSM.process_event(evSelectCommonRYG());
를 통해 RYG로 건너 뛸 수 있습니다하지만 어떻게 내가이 RYG의 기관단총의 현재 상태를받을 수 있나요?
oSM.current_state()[0]
만 반환 1 (이 그대로 외부 상태 머신 BigMom ...을의 상태) ... 도움을
감사합니다!