我想在我的一个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
但是在状态机之外,我的意思是如果我首先声明一个状态机,我可以使用is_flag_active:
StAMFODirector backEnd;
backEnd.start();
processEvent(backEnd,EvBladeDown());
processEvent(backEnd,EvMaster());
if(backEnd.is_flag_active<FlagMaster>()){ // OK
_LOG_DEBUG("Flag Master active");
}
如果我使用front_end的is_flag_我再次遇到编译器错误(在msm :: back :: state_machine中没有这样的函数)。
知道如何与on_entry一起使用is_flag_active吗?或者,如果不可能有任何替代方案吗?
感谢您的帮助, 的Gabor
答案 0 :(得分: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
关键字。请参阅此常见问题解答,了解有关在此背景下必要的原因:What is the ->template
, .template
and ::template
syntax about?