Boost :: StateChartの状態の録音状態の変更
-
14-11-2019 - |
質問
単体テストの場合は、ステートマシンイベントを開始した後にすべての状態トランザクションを録音しようとしています。
例えば、iがasync_state_machineのFIFO_SchedulerにPOST_EVENTをPOST_EVENT aの場合、ステートマシンは状態B、Cを通過し、次にDに戻ります。
すべてのイベント状態を記録できずに、単体テストを実行するときに行われた後に状態Dに入ったことを確認できます。 - (
私が考えることができる唯一のことは、私が作成するすべての状態のすべての反応方法またはコンストラクタを変更することです(simple_stateから派生された)。これは、StateのReact()メソッドを呼び出す直前にasync_state_machineに接続したいときに少しハッキングされているようです...
解決
これは、StateのReact()メソッドを呼び出す直前にASYNC_STATE_MACHINEに接続したいときに少しハッキングされているようです...
なぜあなたはしないのですか?
async_state_machine
を拡張し、希望のフックを追加する新しいクラスを作成します。アクセスが問題である場合(おそらく)、壮観な#define private public
(StateChartを含む前にprotected
Hack)を実行します。州の歴史にローカル変数を追加し、新しい種類の州CTORを追加するのに似たものをやりました。
他のヒント
別のハックを追加しました。各状態は、ブーストステートマシンによって使用される前に作成されます(次の状態になる後に破壊されます。 まだちょっとハッキングされているようです... Wash Boost ++はこれを行うためのクリーナーな方法を持っていました:--p