問題タブ [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.

0 投票する
1 に答える
393 参照

c++ - MSM コンパイルの高速化

ブースト MSM ステート マシンの明示的なテンプレート インスタンス化を使用して、プロジェクトのコンパイル時間を短縮しようとしています。ただし、明示的なテンプレートのインスタンス化を追加するたびに、プロジェクトはコンパイルされません。

http://coliru.stacked-crooked.com/a/9850cae23afdada2のドキュメントの例を使用して、問題の例を見つけることができます。(翻訳単位が 1 つしかないため、不自然な例ですが、プロジェクトで明示的なテンプレートのインスタンス化を使用した場合と同じエラーが発生します。)

これらのコンパイルエラーを解決する方法を知っている人はいますか?

0 投票する
1 に答える
493 参照

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