2016-08-29 9 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状態マシン図と完全なコードが含まれています。