1

たとえば、マシンを説明するテンプレート XML ファイルを読み取るなど、boost msm を動的に使用して FSM を作成する方法はまだわかりません。問題に対処する方法はありますか?ブースト msm 1.61 でファンクター アプローチを使用したいと考えています。

一般的な方法でフロントエンドの基本クラスを作成できるように、少し進歩しました。

class SMBase : public msmf::state_machine_def<SMBase>
{
 ...
};
using SMBaseBackend = msm::back::state_machine<SMBase>;

class SMDerived : public SMBase
{
 ...
};
using SMDerivedBackend = msm::back::state_machine<SMDerived>;


class SMDerived2 : public SMBase
{
 ...
};
using SMDerived2Backend = msm::back::state_machine<SMDerived2>;

ただし、ステート マシン自体はバックエンドによって操作されており、実行時に後者を選択する方法はこれまでのところわかりません (たとえば、

map<int, smart_pointer<SMBaseBackend> >

)。

4

2 に答える 2

0

実行時に多くのステート マシンから選択する必要がないセットアップで問題なく機能する、一種の回避策があります。

親ステートマシンを包含する 1 つを定義し、サブマシンで他のものを実装します。次に、ランタイム レベルで、親ステート マシンの遷移テーブルを使用し、それぞれの process_event ( ) を呼び出すことによって、それぞれのサブマシンに「スキップ」できますrespective_event()

current_state だけが親レベルの状態を返すだけで、非常にうまく機能します。

于 2016-06-22T13:38:38.067 に答える