問題タブ [boost-msm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boost-msm - boost::msm eUML で、attributes_ << をステート マシンまたはステートに指定した場合、それらを (再) 設定するにはどうすればよいですか?
イベントに属性を追加すると、イベント名を関数のように使用できることがわかります...
そして、アクションの中で、書くことでこれを取り戻すことができます
ここで、マシン全体に属性を設定すると、次のようになります。
someAttribute1 の値を設定するにはどうすればよいですか?
州に対する同じ質問:
someAttribute1 の値を設定するにはどうすればよいですか?
ついに、
オブジェクトの作成後に属性を変更する方法はありますか?
たとえば、ステート マシンの属性を設定したいのですが、状態の 1 つで、ステート マシンに保存できる情報を覚えておきます。(この場合、ソケットを格納したい。)
ありがとう。
c++ - ブースト メタ ステート マシンのバックエンドによるフロントエンドへのアクセス
何故かコンストラクタでステートマシンのパラメータを設定できないので、バックエンドからメタステートマシンのパブリックメンバ関数にアクセスしたい。つまり、次のようなものが欲しい
これは可能ですか?ありがとう
もう 1 つの解決策は、パラメーターをイベントによってステート マシンに渡すことです。
c++ - ブーストmsm-ブーストmsm複数の遅延イベント
アクティブ状態とアイドル状態の2つの状態があるとしましょう。アクティブ状態でイベントを受け取った場合は、それらを延期して、アイドル状態に戻ったときに実行したいと思います。
しかし、アイドル状態に戻ったときに、以前に延期されたどのイベントを処理するかを選択する方法はありますか?または、それらに優先順位を付けたり、それらのいくつかを無視したりする方法はありますか?
ありがとう、
c++ - boost::msm - 状態の文字列表現 (つまり、getName) を取得する方法は?
boost::msm ライブラリを使用して、コード内にステート マシンを作成しようとしています。状態の文字列名 (int id ではない) を取得する方法を知っている人はいますか? ロギング/デバッグの目的でこれを取得しようとしています。たとえば、no_transition 関数では状態 ID を取得しますが、読みやすいように名前を取得しようとしています。
イベントと状態を定義する方法は次のとおりです。
イベント:
どんなアイデアでも素晴らしいでしょう。ありがとう!
boost - Boostmsmでのスレッドセーフ
私はメタ状態ライブラリを後押しするのは初めてです。私はmsmを使用する必要がある1つのアプリを構築しています。
私のアプリケーションには2つのスレッドがあり、共有リソースとして同じmsmオブジェクトを使用しています。両方のスレッドが同じmsmオブジェクトでprocess_eventを呼び出す場合、msmはスレッドセーフになりますか?
どんなアイデアでも大歓迎です。
c++ - boost::msm の状態 ID
boost::msm のチュートリアルには、現在の状態を確認する方法を示す例があります。
作成者は配列を使用しstate_names
ます。しかし、状態の順序を決定する方法の説明は見つかりませんでした。もちろん、遷移表の「開始」列の状態の順序であると推測できます。しかし、一部の州が「開始」列にない場合はどうでしょうか?
boost - Boost::any がイベントとして使用されているにもかかわらず、MSM をブーストします。遷移は発生しません。
ブースト MSM フレームワークを使用してステート マシンを開発しています。彼らのチュートリアルでは、現在の状態がソース状態である場合、boost::anyを「Kleene イベント」として使用して、発生したイベントの遷移を許可できると述べています。しかし、これは私にはうまくいきません。「no_transition」を受け取るだけです。ここに私のサンプルコードがあります:
実行すると、次の出力が生成されます。
入力: State1
イベント N12_GLOBAL__N_110some_eventE で状態 0 からの遷移なし
出発: State1
入力: State2
「some_event」で「State1」から「State2」への遷移が発生することを期待しますが、どうやらそれは発生しません。
何かが欠けているに違いないのですが、それが何かわかりません。
boost-msm - MSM 疑似終了状態のブースト
いくつかの状態に独自のサブ状態マシンがあるブースト MSM 状態マシンを作成しています。Boost の例に従って、直交領域を作成しました。これにより、エラー イベントをどこからでも送信してステート マシンを終了させることができます。
これは、サブ ステート マシンの 1 つからエラー イベントをポストしようとするまではうまくいきました。何も起こらなかったので、Pseudo Exit ステートを使用してエラー イベントを親ステート マシンに転送する必要があるように思われました。これは最初はうまくいきましたが、各サブステート マシンからのエラーを処理するために疑似終了ステートを追加すると、しばらくするとコンパイラ エラーが発生します。それを突き止めることもできず、1つまたは2つの疑似終了状態を持つことができますが、最終的には壊れるだけです。各サブ ステート マシンには 7 つ以上の遷移はなく、親には 9 つしかありません。各サブ ステート マシンには 2 つまたは 3 つのサブ ステートが含まれ、親には 6 つのサブ ステートがあります。
なぜこれが起こるのか誰にも分かりますか?トランジションを交換しようとしましたが、特定のエントリが間違っているようには見えません。状態名が親クラスによってスコープされているため、競合が発生する理由がわかりません。さまざまなイベントがトリガーされているにもかかわらず、疑似出口が 1 つしかないためですか? それとも私のコンパイラだけですか?
エラーは次のとおりです。
何か案は?ありがとう。
class - boost::msm 基本ステート マシンでポリモーフィズムの例を探す
私はC ++、ブースト、およびステートマシンの使用が初めてです。ポリモーフィックなboost::msmステートマシンの例を知っている人はいますか?
提供されている基本的な例で遷移アクションを仮想に変更しようとしましたが、リンカーは次のように述べています。
「DerivedClass の vtable」への未定義の参照
編集: エラーは、コードを分析することによって解決された、基本的で退屈なインクルード/定義エラーでした。
基本的な例をもう一度注意深く読んだ後、ポリモーフィックにするには、子クラスでバックエンドを定義し、フロントエンドから継承する必要があることに気付きました。
以下のソース ファイルでは、ポリモーフィックの基本的な msm が定義されています。
- 花は状態のない死んだオブジェクトです
- FlowerMSM はステート マシンです (Flower に MSM の動作を与える方法)
- LiveFlower は両方から継承し、FlowerMSM からの遷移アクションをオーバーライドします
LiveFlower.cpp
FlowerMSM.cpp
完全を期すために、"Dead" フラワー クラス: Flower.hpp
編集: 誰かがより良い解決策を持ってきた場合に備えて、まだ自分の答えを受け入れていません。