2016-08-29 71 views
1

以下是對具有Boost MSM經驗的人員的一個問題。 我有一個非常大的狀態機實施了Boost MSM,最後我今天用完了50個矢量限制(有太多事件進入我的狀態機,這是無法避免的)。我創建了更高的矢量頭(vector60,vector70等),但我想整體壓縮狀態機。具有Boost MSM的分層狀態機

問題是,MSM是否支持分層狀態機。例如(糾正我,如果我錯了),在分層狀態機中,如果事件未在特定狀態下處理,那麼該事件將被轉發到當前狀態的父狀態,如此類推。

作爲減少轉換表大小的一部分,我希望創建一個父狀態,其中將處理具有通用處理程序的事件,從而減少轉換表大小。

任何意見/意見表示讚賞。

謝謝

+0

我對MSM一無所知,但我自己的CHSM是分層的:http://chsm.sourceforge.net –

回答

3

是的,Boost.MSM支持分層狀態機。分層狀態機稱爲「子機狀態」。這是UML術語,Boost.MSM也使用它。

這裏是一個子機狀態的一個例子:從父狀態機 http://redboltz.wikidot.com/sub-machine-state

過渡到子狀態機,你可以使用切入點僞狀態。請參閱http://redboltz.wikidot.com/entry-point-pseudo-state

從子狀態機轉換到父狀態機時,可以使用退出點僞狀態。請參閱http://redboltz.wikidot.com/exit-point-pseudo-state

該事件被評估爲內部最多狀態到外部狀態。所以你可以在父狀態機上寫公共轉換。這裏有一個小實例: http://redboltz.wikidot.com/practical-sub-machine-example

所有的例子都包含UML狀態機圖和完整的代碼。

相關問題