問題タブ [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.
c++ - MSM コンパイルの高速化
ブースト MSM ステート マシンの明示的なテンプレート インスタンス化を使用して、プロジェクトのコンパイル時間を短縮しようとしています。ただし、明示的なテンプレートのインスタンス化を追加するたびに、プロジェクトはコンパイルされません。
http://coliru.stacked-crooked.com/a/9850cae23afdada2のドキュメントの例を使用して、問題の例を見つけることができます。(翻訳単位が 1 つしかないため、不自然な例ですが、プロジェクトで明示的なテンプレートのインスタンス化を使用した場合と同じエラーが発生します。)
これらのコンパイルエラーを解決する方法を知っている人はいますか?
c++ - boost::msm でステート マシン (SM) のバック/フロント エンドにアクセスできる "BaseState" を実装する方法
SM 全体とクライアント コード (つまり、SM 外のコード) だけでなく、州間でもデータとアクセスを共有したいと考えています。
私がネットで思いついたことに基づいて、最善の方法は、基本クラスからすべての状態を継承することです。
基本クラスを追加して、すべての状態とそれから継承する SM を作成するのは簡単ですが、この基本クラスのメンバーとして SM のバックエンド/フロントエンドにハンドラーを追加するにはどうすればよいですか?どのように初期化できますか?
このサンプル コードはコンパイルされますが、SubState に設定された fsmHandler にアクセスするとクラッシュします (通常、SubState はルート fsm にアクセスできません)。
質問:
SM 階層の深いサブマシンにあるルート SM とそのデータにアクセスするにはどうすればよいですか?
Q1) 実行時エラーを解決するにはどうすればよいですか?
Q2) クライアント コード (SM の外部) から SM にデータを渡す方法が正しくありません。これを行うより良い方法はありますか?スレッドセーフですか?
Q3) どうすればtypedef StateBase_<MyFsm_> StateBase
コンパイルできますか?
実用的なサンプルを提供していただければ幸いです。お時間をいただきありがとうございます。
コード:
main.cpp
myfsm.h