C++ 带Boost-MSM的分层状态机

C++ 带Boost-MSM的分层状态机,c++,boost-msm,C++,Boost Msm,这里有一个问题要问那些有Boost MSM经验的人。 我用Boost MSM实现了一个非常大的状态机,最后今天我超出了50的向量限制(有太多无法避免的事件进入我的状态机)。我已经创建了更高的向量头(vector60、vector70等),但我想将我的状态机作为一个整体进行压缩 问题是,MSM是否支持分层状态机。例如(如果我错了,请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将转发到当前状态的父状态&依此类推 作为减少转换表大小的一部分,我希望创建一个父状态,在该状态下处理具有公

这里有一个问题要问那些有Boost MSM经验的人。 我用Boost MSM实现了一个非常大的状态机,最后今天我超出了50的向量限制(有太多无法避免的事件进入我的状态机)。我已经创建了更高的向量头(vector60、vector70等),但我想将我的状态机作为一个整体进行压缩

问题是,MSM是否支持分层状态机。例如(如果我错了,请纠正我),在分层状态机中,如果事件未在特定状态下处理,则该事件将转发到当前状态的父状态&依此类推

作为减少转换表大小的一部分,我希望创建一个父状态,在该状态下处理具有公共处理程序的事件,从而减少转换表的大小

如有任何建议/意见,不胜感激


谢谢

是的,Boost.MSM支持分层状态机。分层状态机称为“子机状态”。它是UML术语,Boost.MSM也使用它

以下是子机状态的示例:

从父状态机到子状态机的转换,可以使用入口点伪状态。看

从子状态机到父状态机的转换,可以使用出口点伪状态。看

事件将从最内部状态评估为最外部状态。因此,您可以在父状态机上编写公共转换。下面是一个小的实际例子:


所有示例都包含UML状态机图和完整的代码。

我对MSM一无所知,但我自己的CHSM是分层的: