問題タブ [boost-fusion]
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++ - Boost.Spirit.Qiを使用してさまざまな構造を解析するにはどうすればよいですか?
この例では、employee構造体は「employee {int、string、string、double}」の形式で解析されます。
この例を変更して、「intern {int、string、string}」などのさまざまなタイプの構造体も解析できるかどうかを知りたいです。
具体的には、構造体型でオーバーロードされた関数に構造体を渡したいと思います。これにポリモーフィックなダブルディスパッチを使用することを避け、代わりに、正しいオーバーロードされた関数に静的に一致するように解析される具象型を保持できれば素晴らしいと思います。
c++ - エラー:boost.fusion :: for_each()およびboost.tupleから派生した構造体
このコードのコンパイル時:
エラーが発生します:「structany_type」に「category」という名前のタイプがないのはなぜですか?boost.tupleから継承したい。
c++ - boost :: mpl::vectorからboost::fusion::vectorのインデックスを取得する
私はブーストフュージョンとmplライブラリをいじり始め、非常に単純な問題で立ち往生しました。
私は次のタイプを宣言しました:
ここで、FusionVectorから値を取得する関数を作成したいと思いました。
関数は期待どおりに機能しますが、boost :: mplベクトルからインデックスを取得してこの関数で使用し、テンプレートパラメーターとして関数に渡さないようにします。しかし、私はこれをどのように行うかを今のところ理解していませんでした。
誰かが私にヒントを教えてもらえますか?
c++ - セグメンテーション違反(sigsegv)またはガベージ結果を引き起こす共有ポインター(shared_ptr)のFusionコンテナーをブーストします
編集:これは一時的な問題であることが判明しました。基本的に、私はC ++をJavaやC#のように機能するかのように無意識のうちに使用していましたが、そうではありません。うまくいけば、これは良い注意話になるでしょう。
joint_view
編集:この問題は、との組み合わせでのみ発生するようshared_ptr
です。生のポインターは同じシナリオで正常に機能するように見えます。これは、すべてのアイテムを同時に追加せずに構築されたプレーンなフュージョンコンテナー内の共有ポインターと同様です。以下の詳細:
mingw gcc 4.5.1を
使用しています。ブーストフュージョンコンテナを使用してコンテンツを元に戻すときに、特有の問題が発生します。にラップされたカスタムクラスがありstd::shared_ptr
、それがフュージョンに渡されますmake_list()
(またはmake_vector()
、問題ではないようです)。すべてのオブジェクトを一度にコンテナに入れることができれば、すべてうまくいきます。コンテナに別の共有ポインタを追加すると、問題が発生するようです。これにより、が生成されますjoint_view
。を使用して繰り返しfusion::for_each()
、関数オブジェクトを渡して値を出力します。、の代わりに共有ポインターのプレーンな融合コンテナーを反復している場合joint_view
、または共有ポインターが含まjoint_view
れていない場合は正常に機能しますが、それ以外の場合は、セグメンテーション違反またはガベージ値です。
以下は、問題を特定するために作成したテストプログラムです。問題が何であるかについてのアイデアはありますか?やるべき/やるべきでないことを見逃している可能性は十分にあります:(
c++ - アルゴリズムを制御するためのファンクターのコンパイル時のコンテナー?
次のような単純なものが必要だとします。
特殊なアルゴリズム (コンパイル時に特殊化された) の 1 つをランダムに選択し、このアルゴリズムを処理するコア アルゴリズムがあります。これらの特殊なアルゴリズムは、ファンクターを通じて実装されます。
問題は次のとおりです。コンパイル時にビルドされるコンテナーを実装する方法です。コアアルゴリズムは最初にこのコンテナーのサイズを確認できます (「4 つのアルゴリズムを取得しました -> アルゴリズム 0-3 をランダムに選択する必要があります」)そして、このコンテナーでファンクターを実行できます (「ランダムに選択された 2 -> コンテナー内の 3 番目のファンクターを処理する」)。
できるだけ簡単に実装するにはどうすればよいでしょうか。可能だと思います。
奇妙に繰り返されるテンプレートイディオムとの関連はありますか? (ウィキ リンク) Boost::Fusion
を使用する簡単な方法はありますか? (公式ドキュメント)
編集:すべてのアルゴリズムはコアアルゴリズムで使用されます。使用パターン (乱数) は実行時の決定です (したがって、コンパイル時のランドは必要ありません)。アルゴリズムは、安全にアクセスするために、ファンクターのコンテナーとこのコンテナーのサイズを認識している必要があります。
c++ - イテレータをブーストフュージョンマップに入れるにはどうすればよいですか?
のイテレータを取得しようとしていますがboost::fusion::map
、何か不足しています。
以下は で動作しboost::fusion::vector
ます:
出力:
同様のことをしたいのですfusion::map
が、コンパイルに失敗します:
私はこれらを含めています:
エラー:
c++ - フュージョンの奇数を増やす
Fusion を試してみたところ、非常に奇妙なことがわかりました...コードは次のとおりです... 問題のあるコードを // ############ TROUBLE HERE ###### で強調表示しました
constRefFieldMap() 関数を使用すると、ガベージ値または SIGSEGV を取得します。boost::fusion::zip を直接呼び出すと、完全に機能します。これが出力です...
以前にこの質問を見てきました...ここで同じ問題に遭遇していますか???
編集1:
私がやろうとしていることの例を提示する...
実は... 私はこのようなコードを書こうとしています。
フィールド名で呼び出すことができるアクセサーと修飾子...
JSON と XML を解析してオブジェクトを作成するためのスピリット パーサーを作成する予定です...コード ジェネレーターの助けを借りて。主なアイデアは、すべてのオブジェクトに対して解析コードを生成することを回避することですが、使用されるオブジェクトに対してのみ生成し、バイナリ サイズを縮小することです。私は今、何千ものオブジェクトを持っています。
私は今これを機能させました。
c++ - C++構造体のメンバーへの動的および静的なアクセス
メンバーに動的にアクセスできるようにする構造体(または同様のもの)をC++で使用したいと思います。メンバー名を文字列として受け取り、ある種のバリアント型(eg boost::variant
)を返す汎用のゲッターとセッターが必要です。
boost::fusion::map
各メンバーの名前を表す文字列を追加し、文字列とgetterまたはsetter関数の間にSTLマップを作成することで、を使用して実装できると考えていました。車輪の再発明をしたくないので、似たようなものがすでに存在することを望んでいました。
どう思いますか?私のアイデアはうまくいくでしょうか?私の目標を達成するための他の方法を知っていますか?
c++ - シーケンスのシーケンス (シーケンスの) を平坦化する
ブースト::フュージョンを使用しています。
次のようなものがあるとしましょう。
となるような関数 f を生成したい
つまり、シーケンスの平坦化されたバージョンです。
これが元のシーケンスのビューであるか、実際のベクトルであるかは気にしません。
GCC 4.5.1 でコンパイルできるのであれば、C++0x での解決策は気にしません。
ノート:
データ要素を制限したくないのですが、それが役立つ場合は、「データ」要素がすべて共通の基本クラスから派生することを自由に要求してください。
すなわち
それで
「is_base_of」を使用して、データ要素が何であるかを理解できると思います。
c++ - Fusion :: vectorをシリアル化する方法は?
教えてください、fusion :: vectorオブジェクトタイプをシリアル化/逆シリアル化するにはどうすればよいですか?
ありがとう。