問題タブ [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.Qi パーサーをコンパイルしようとする際の問題
以下は、完全に自己完結型の例です。問題は行 84 ~ 89 にあるようです。これらの行がコメント アウトされている場合、例はコンパイルされます。私が解析しようとしているのは、コロンで区切られた 5 つの項目を持つファイルの各行で、最後の 3 つの項目はオプションです。単一の関数は を受け取り、boost::filesystem::file
を使用してそれを吸い込みboost.interprocess
、解析します。
これを解析したいものの例:
a:1
a:2:c
a:3::d
a:4:::e
a:4:c:d:e
結果は に格納する必要がありvector<file_line>
、file_line
5 つのメンバーを持つ構造体であり、最後の 3 つはオプションです。コードとエラーは次のとおりです。
コード
MSVC 10 からのエラー メッセージ
質問は 30,000 文字に制限されているため、ここでは最初の数件のみを表示します。この例は、あなたのマシンで同じものをコンパイルして生成しようとするはずです。
...中略...
c++ - Boost.Fusion関数のリストを使用する
次のコードで、関数オブジェクトのリストをいくつかの値に適用しようとしています。しかし、このコードは
err
boost_1_44\boost\fusion\algorithm\iteration\detail\for_each.hpp(82): エラー C2064 を引き起こします:
関数オブジェクトのリストを値に適用する方法は?
c++ - Boost Fusion/MPL: タイプをシーケンスから同等の any_range のシーケンスに変換します
any_range
Boost を使用して、複数の異種データ範囲を処理したいと考えています。データ範囲のタイプは、Fusion ベクトルとして知られています。次に例を示します。
このような型が与えられた場合、次のような型をさらに派生させるためのテンプレートを書きたいと思います。
は次のようにAnyRange
定義されます。
私は試して失敗しました。これはFusionでも可能ですか?MPL?あるいは、間違った道を進んでいるのかもしれませんany_range
。
c++ - 関数オーバーロード エラー
コードがこのように動作する理由を理解できませんか?
問題は、最初のケースで空のベクトルの func() が呼び出されるのはなぜですか?
このトピックに関するドキュメント:
ありがとう。
c++ - ブースト::スピリット::気。インライン パーサー式をスタンドアロンの文法に変換する方法と、それらによって生成されたタプルをアンパックする方法は?
私は QI と Phoenix を使用しており、セマンティック アクション内の関数呼び出しの引数として使用される 4 つの bool を返す小さな文法を書きたいと考えています。
それらを必要とするいくつかの関数があり、これまでのところ、このアプローチを使用しています。
それ自体は問題ありませんが、名前空間の部分を「使用」していても、あちこちで使用するのは見苦しく、混乱を招きます。
そのため、この表現をスタンドアロンの文法に抽出したいと考えました。
だから私はこれを試しました(クレジットはテストベッドのildjarnに行きます):
fourBools[phx::bind(&noDice, spirit::_1)]
に置き換えない限り、コンパイルされませんfourBools[phx::bind(&worksFine, spirit::_1)]
。
つまり、私の問題は、引数の数が署名レベルで異なるため、呼び出される関数の署名に一致するように引数をアンパックすることです (4 つのブール値の 1 つのタプルと 4 つのブール値自体)。
タプルを個別の必要がある既存の関数の個々の引数に変換するラッパーを記述する代わりに、フェニックスプレースホルダーを直接使用してアンパックすることは可能ですか? もしそうなら、その構文は何ですか?結局のところ、プレースホルダー( qi::_bool >> qi::_bool >> qi::_bool >> qi::_bool)
によって「アンパック」されると、インライン バージョンは正常に動作します。spirit::_1 - spirit::_4,
そのため、このバージョンもタプルを返すかのように見え、タプルを返す文法とは異なり、上記のアプローチでは何らかの形でアンパック可能です。
どうすればこれに対処できますか?
c++ - mpl::transform on boost::fusion::tuple
g++ (GCC) 4.6.0 20110603 (prerelease)
次のコードは、 と-std=c++0x
でコンパイルされませんBoost 1.46.1
。インクルードがありませんか、これは実際にはバグですか? 後者の場合、それを回避する方法は?
c++ - ブーストフュージョンの質問
以下をコンパイルするのに問題があります(私はフュージョンが初めてです)。特に、"_" (is_same 内) がどこから来たのかわかりません。ブースト::ラムダから? Boost::mpl? これをコンパイルするには、どのインクルードが必要ですか?
ありがとう!
c++ - boost.fusion ベクトル内の要素への参照
編集 - 無視してください - 質問は単純なタイプミスで解決されました。休憩が必要です。
ブースト融合ベクターの要素への参照にアクセスするにはどうすればよいですか?
boost.tuples tuples::get<i>(variable)
(参照を返す)とは異なりfusion::at_c<i>(variable)
、定数が返されるため、問題が発生します。
以下は私の問題を示しています
boost - boost::MPL と boost::fusion の違い
boost::fusion および boost::mpl ライブラリは初めてです。これら2つのライブラリの主な違いを教えてください。
今までは fusion::vector と他のいくつかの単純なものしか使用していませんでした。現在、fusion::map または MPL::map を使用したいのですが、正しいものを選択する方法がわかりません。
単純型を複雑型 (alisa 型) にマップする必要があります。現在、次のスニペットがあり、両方とも必要なだけ機能します。
ブースト::フュージョン:
ブースト::MPL:
MPLと融合の間に違いはありますか? あるライブラリが別のライブラリよりも優先されるシナリオはありますか?
返信ありがとうございます。