2011-08-26 4 views
1

내 상태의 on_entry 템플릿 기능 중 하나 내부 is_flag_active() 함수를 사용하고 싶습니다 :Boost.MSM on_entry 내부에서 is_flag_active를 사용하는 방법?

struct StBladeDown : public msm::front::state<> { 
    template<class Event, class FSM> 
    void on_entry(Event const& event, FSM& fsm) { 
     if(fsm.is_flag_active<FlagMaster>()) { // ERROR 
      // doSomeThing(); 
     } 
    } 
}; 

그러나 나는 다음과 같은 컴파일 오류가 있어요 : 상태 머신의 외부 그러나

StOk.hpp: In member function 'void mr::mrd::amfo::StOk_::StBladeDown::on_entry(const Event&, FSM&)': 
StOk.hpp:78: error: expected primary-expression before '>' token 
StOk.hpp:78: error: expected primary-expression before ')' token 

를, 나는 나는 front_end의 is_flag_를 사용하는 경우

StAMFODirector backEnd; 
backEnd.start(); 
processEvent(backEnd,EvBladeDown()); 
processEvent(backEnd,EvMaster()); 
if(backEnd.is_flag_active<FlagMaster>()){ // OK 
    _LOG_DEBUG("Flag Master active"); 
} 

내가 컴파일러 에로을 얻을 : 내가 처음 상태 머신 (state machine)를 선언하는 경우, 나는 is_flag_active를 사용할 수 있음을 의미 r 다시 (msm :: back :: state_machine에서 그런 기능 없음).

on_entry와 함께 is_flag_active를 사용하는 방법에 대한 아이디어가 있으십니까? 아니면 가능하지 않은 경우 대안이 있습니까? 어떤 도움

감사합니다, 가보

답변

3

이 시도 :

struct StBladeDown : public msm::front::state<> { 
    template<class Event, class FSM> 
    void on_entry(Event const& event, FSM& fsm) { 
     if (fsm.template is_flag_active<FlagMaster>()) { 
      // doSomeThing(); 
     } 
    } 
}; 

참고 template 키워드를 추가. 이 문맥에서 왜 필요한지에 대한 자세한 내용은 FAQ를 참조하십시오. What is the ->template, .template and ::template syntax about?

+0

감사합니다. 덕분에 많은 도움이되었습니다. –

관련 문제