C++ 如何确定boost msm中的特定状态是否处于活动状态?

C++ 如何确定boost msm中的特定状态是否处于活动状态?,c++,boost,template-meta-programming,state-machine,boost-msm,C++,Boost,Template Meta Programming,State Machine,Boost Msm,在一个状态内进行的处理取决于另一个状态是否处于活动状态。如何确定boost msm中的特定状态是否处于活动状态 我想到了类似以下伪代码的东西: auto state=fsm.get_state(); bool state_Status=state.isActive()您可以查看链接(关于标志和获取状态): 然而,boost-msm速度很快,但也非常复杂。如果使用不当,您的代码将很难理解 我建议您使用状态模式使用标志需要我定义一个附加的结构作为每个状态的“标志”(例如struct S1Active

在一个状态内进行的处理取决于另一个状态是否处于活动状态。如何确定boost msm中的特定状态是否处于活动状态

我想到了类似以下伪代码的东西:

auto state=fsm.get_state();

bool state_Status=state.isActive()

您可以查看链接(关于标志和获取状态):

然而,
boost-msm
速度很快,但也非常复杂。如果使用不当,您的代码将很难理解


我建议您使用状态模式

使用标志需要我定义一个附加的结构作为每个状态的“标志”(例如
struct S1Active{}
),然后将标志分配给每个状态(即
typedef mpl::vector flag_list
)。我认为BoostMSM会为这样的用例设计出更好的方法(我想这是很常见的)。您也可以在状态中使用
bool isActive
,并根据需要检查它(
fsm.get_state().isActive
)。非常感谢任何其他/更好的解决方案。@郭:您的第二个注意事项(使用状态模式)很重要:我被建议使用成熟的状态机实现,该实现经过了良好的生产测试,而不是自己从头开始实现“设计模式”。我想就这个问题发表其他意见。。。提前谢谢。你想知道什么?简单地说,从fsm外部获取活动状态?我不确定“在一个州内进行的处理”是什么意思。这是转换的动作吗?我只想检查一个状态是否处于活动状态(从SM内部)。在我的用例中,我想做一些类似的事情:
if(stateX==active){do this…&transition to stateY}否则{do this…&transition to stateZ}
可以使用`const int*current_state()`获取状态索引。状态索引的定义顺序如下。您提到“从SM内部”,当触发以“if(stateX==actime){…”开头的语句时?我认为“在SM内部”表示操作,例如进入/退出、转换操作。顺便问一下,在这种情况下,您使用了多少状态机实例?
fsm.current_State()
返回整数数组(即活动状态ID)。当我不知道数组的大小时,如何使用它?