【发布时间】:2018-07-23 07:05:06
【问题描述】:
在一个状态内完成的处理取决于另一个状态是否处于活动状态。如何确定 boost-msm 中的特定状态是否为 Active?
我想到了下面的伪代码:
auto state = fsm.get_state<MyFsm_::State_x&>();
bool state_Status = state.isActive();
【问题讨论】:
-
你想知道什么?简单地说,从 fsm 外部获取活动状态?我不确定“在状态内完成的处理”是什么意思。那是过渡的动作吗?
-
我想简单地检查一个状态是否处于活动状态(从 SM 内部)。在我的用例中,我想做某事:
if(stateX==active){ do this ... & transition to stateY} else{ do that ... & transition to stateZ} -
你可以使用`const int* current_state()`boost.org/doc/libs/1_67_0/libs/msm/doc/HTML/…获取状态索引。状态索引定义为如下顺序boost.org/doc/libs/1_67_0/libs/msm/doc/HTML/…。
-
你提到“从SM内部”,当以“if(stateX==actime){ ...”开头的语句被触发时?我认为“在 SM 内部”意味着动作,例如进入/退出,过渡动作。顺便问一下,在这种情况下您使用了多少个状态机实例?
-
fsm.current_state()返回一个整数数组(即活动状态 ID)。当我不知道数组的大小时如何使用它?
标签: c++ boost template-meta-programming state-machine boost-msm