問題タブ [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.
boost - 代替パーサー式の可変リストから Spirit パーサー式を生成する
boost::spirit::qi ルールのリストを取得し、リストを次の形式の式に展開する可変個引数関数を実装する最も簡単な方法を探しています。ルール2 | rule3 |.... ルールが属性を合成しないと仮定しましょう。あなたの親切な助けに感謝します。
c++ - boost::fusion 連想構造体を反復処理し、一般的な方法でキーにアクセスする方法
これは、この素晴らしい知識の交換に関する私の最初の質問であり、何らかの助けが得られることを願っています.
PrintTo 関数を作成する一般的な方法を実装しようとしています (後で GoogleTest で使用されます)。
したがって、次のコードは仕事の半分だけを行います。定義された構造体の値のみを出力しますFoo::Bar
だから私が探しているのは、自動的に印刷する方法Foo::Keys
です。BOOST_FUSION_DEFINE_ASSOC_STRUCT のマクロ生成コードを調べたところ、キーが static const char* boost::fusion::extension::struct_member_name::call() として利用できることがわかりました。
fusion::for_each のコードを調べたところ、コード全体を「複製」して、fusion_printer_impl::operator() がキーと値の 2 つのパラメータで呼び出されるようにする方法しかありませんでした。その方向に進む前に、これを達成するためのより簡単な方法があるかどうかを知りたい.
boost::fusion::map を明示的に定義できることはわかっています。ここでは、fusion::pair を介してキーのタイプと値に自動的にアクセスします。しかし、これは現在私にとって選択肢ではありません。
したがって、ここでの助けは大歓迎です。
boost - ブーストスピリットを使用して文字列を構造体に解析します
文字列を解析し、次のように定義された構造体に移動する必要がある次のコードがあります。
私の文法はこれです:
次に、次のコード行を使用して文字列を解析します。
OK、問題は、構造体のフィールドが 10 個以下の場合はコードが正常にコンパイルされることですが、構造体のフィールドがそれ以上になるとエラーが発生するSPIRIT_ARGUMENTS_LIMIT
ため、デフォルト値が 10 であるため、パラメーターが原因であると推測しました。
スピリット ヘッダー ファイルをインクルードする前に、このパラメーターを必要なサイズに定義しようとしましたが、それでもコンパイル エラーが発生します
この問題を解決するにはどうすればよいですか?
c++ - カスタム リスト テンプレートへの精霊解析整数のブースト
そのようなファイルを解析するブーストスピリットに問題があります:
特に難しいことはありません。次の文法はそのために機能します。
私の問題は、解析結果を保存する必要があることです。たとえば、int の list1 と list2 をカスタム リスト テンプレートに保存する必要があります。
ChainLink は次のとおりです。
vector と同じように SimpleLinkList にメソッドのプッシュバックがありますが、int を解析して ChainLink に保存し、SimpleLinkList に追加する方法がわかりません。
テンプレート構造を融合シーケンスに適合させる方法については、http://boost-spirit.com/home/2010/02/08/how-to-adapt-templates-as-a-fusion-sequence/で既に確認しました。 .
ループ中にアイテムを削除および追加できるようにするには、カスタム LinkList が必要です。
ファイルを正常に解析するためにすべてを整理する方法を理解するための助けが必要です。
ありがとうございます。
c++ - ブーストフュージョンマップを逆に使用することは可能ですか?別名キーは567、値はタイプですか?
タイプマップの値が欲しいのですが、私が見るところ、ブーストフュージョンは、タイプが常に最初のメンバーであるペアを使用するマップを使用しています(マップのキーです)?
値 (上記の例では「X」など) をキーと型の値にすることはできますか? そうでない場合は、少なくとも値に基づいてフィルター処理を行うことができます (これは遅いため、2 番目のパラメーターに基づいてフュージョン ベクターを並べ替え、その上で binary_search を使用できるかどうかを知っておくとよいでしょう (ここでも、キーではなく値を参照するカスタム コンパレーターを使用します)。 .
c++ - タプル - get_or ヘルパー関数
要求された型がタプルに存在しない場合、デフォルトで構築された null 型を返すタプル ヘルパー関数が必要です。
例えば
強化融合魔法が必要なのだろうが、よく分からない。助言がありますか?
c++ - ブースト フュージョン マップ フィールド名へのアクセス
私はブーストフュージョンのいくつかを使用して、通常のC構造体をファイルに書き込もうとしています。XML ファイルは、データをキャプチャして、他のツールと互換性を持たせたり、手動で編集できるようにしたりするのに適した方法のようです。私はほとんどそれを持っているように見えますが、何か基本的なものが欠けているようです. 私はboost::fusionクイックスタートページにあるものとかなり似たものを使用しています: http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html . 補足として、私はこことブーストのドキュメントを徹底的に調べましたが、誰もフィールド名にアクセスしていないようです。
次のように使用したいと思います。
また、構造体を次のように定義したこともありますが、それでもうまくいきません。
最初にメンバーがないことはわかっていますが、フィールド名にアクセスするにはメンバーが必要なようです! 私が持っているコードは x.second で正常に動作しますが、フィールド名を取得するために必要なことを達成しません。他にどのようにこれを達成できますか? ありがとう!