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

0 投票する
2 に答える
1014 参照

c++ - std::vector を変換する方法boost::spirit の構造体のメンバーになるには?

プライマリ属性として使用しstd::string input = "RED.MAGIC( 1, 2, 3 )[9].GREEN"て、単純なに正しく解析する Spirit コードのチャンクがあります。std::vector<std::string>std::vector<std::string>

をを含むstd::vector<std::string>構造体に置き換えたいと思いますが、可能であれば、自動ジェネレーターを引き続き使用します。my_recstd::vector<std::string>

でコンパイルすると-DUSE_MY_REC、不可解なコンパイル エラーの壁が発生します。

サンプルのコンパイルと実行

サンドボックス.cpp

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

c++ - boost::spirit の使用中に boost::variant の boost::fusion 構造体を変換できない

良い時間です!

私はこのコードを書き、コンパイルできることを期待しています。

しかし、clang または GCC でコンパイルすると、エラーが発生します。その中で最も興味深い部分は次のとおりです。

私はclang 3.1またはgcc 4.7とboost 1.52を使用していますが、それは問題ではないと思います。:)

このコードをコンパイルするには、どのように編集すればよいですか?

アップデート

指定した文法が左再帰であるため、入力の処理中に再帰下降パーサーが停止しない場合があることに気付きました。これがコンパイルの問題の原因でしょうか?

0 投票する
2 に答える
460 参照

c++ - boost::fusion::vector のキャスト

boost::fusion::vector の番号付き形式は次のようになります

可変長形式は次のようになります

では、コンパイル時に boost::fusion::vector を番号付き形式から可変長形式にキャストする方法はありますか?

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

stl - D std libにはboost.fusionやboost.mplのようなものが含まれていますか?

物理学で数値コードのプロトタイピングにDを使い始めるべきかどうかはまだ評価中です。

私を止める1つのことは、ブースト、特にフュージョンとmplが好きだということです。

Dはテンプレートメタプログラミングにとって素晴らしいものであり、mplやfusionの機能を実行できると思いますが、確認したいと思います。

dを使い始めても、mplレベルに到達するまでには少し時間がかかります。だから誰かに彼らの経験を共有してもらいたい。

(mplとは、テンプレートにstlを使用することを意味し、フュージョンとは、タプルにstlを意味します。)

物理シミュレーションでは重要なので、パフォーマンスに関するメモもいいでしょう。

0 投票する
2 に答える
740 参照

c++ - タプルとboost.fusionを使用する場合、構造体を使用する理由はありますか?

タプルは構造体に似ています(ここで説明:Boost :: Tuples vs Structs for return values)。唯一の利点は、構造体が数字ではなく短く、キーで記述できる方が便利なことのようです。

フュージョンマップと構造体を使用して、構造体をシミュレートするための戻り値として、キーBoost::TuplesとStructsでアクセスすることもできます。もう少し書きます。

パフォーマンスにもペナルティはないようです。ビューを使用するため、フュージョンの方が高速な場合があります。

したがって、構造体を使用する唯一の理由は、コードをさらに数行記述したくない場合と、コードを読みやすくしたい場合です。

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

c++ - boost::fusion::vector への参照を追加する

変数への参照を使用してブースト融合ベクトルを作成したいと考えています。目標は、さまざまな数のパラメーターを関数に渡し、それらを融合ベクトルに追加することです。参照型のため、すべての要素を TMP で一度に 1 つずつ追加します。ただし、融合ベクトルの一部の要素が間違っている場合があります。未定義の動作 (間違った値、読み取りアクセス違反) のようです。
理解を容易にするために、TMP で使用される再帰を「展開」した例を書きました。Fusion ベクトルに 2 つの参照を追加するだけで、結果が出力されます。

ブースト融合ベクトルの参照がアクセスされると (読み取りアクセス違反)、最初に次の行でプログラムがクラッシュします。

コンパイラとして VC11 を使用しています (バージョン 17.00.51106.1)。エラーはリリース モードでのみ発生します。しかし、VC10、GCC 4.7.0、または GCC 4.7.2 を使用すると、エラーは発生せず、プログラムは完全に正常に動作します。
プログラムを VC11 で動作させるには、この行を変更する必要があります

では、上記の例にはバグが含まれているのでしょうか、それとも VC11 オプティマイザーに何か問題があるのでしょうか? ローカル ブースト フュージョン ビュー (boost::fusion::join はビューのみを返し、ビューは boost::fusion::vector で「通常の」boost::fusion::vector に変換されます) を別のビューに渡すことはできますか?値で機能しますか?

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

c++ - 精霊セマンティックアクションとフュージョンデータタイプを強化

Boost.Fusion ASSOC_STRUCT を返すルールがあります。ルールのパーサーによって解析された結果を _val に割り当てようとしていますが、うまくいきません。話をスキップして、関連するコードを直接紹介します。

(g++ above_file.cpp -std=c++0x でコンパイル) コンパイラ エラーは、この例と実際のアプリケーションでは多少異なりますが、( _val = ActionLine{0, _1, _2} の行で) : ::ActionLine::ActionLine() の呼び出しに一致する関数がなく、_1 と _2 を int に変換できないと思います。

また、ローカル int 変数を追加して、それらを使用して解析された値をコピーしようとしましたが、boost::phoenix::at(_1,0)、boost::phoenix::at(_1,1 ) (私はここでそれらのアイデアがスピリットのセマンティックアクションパラメータを高めることを発見しました)

0 投票する
2 に答える
851 参照

c++ - 実行時/コンパイル時の混合条件でのタグのディスパッチ

次のタグディスパッチコードがあります(LiveWorkSpaceを参照)

ただし、このタグのディスパッチは関数と密接に結びついており、funこれを使用するすべての関数に対してこのタグのディスパッチを実装するには、3 つのヘルパー関数を維持する必要があります。

引数推定失敗:関数オブジェクトfun_implのテンプレート パラメーターに抽象化しようとしましたが、引数として渡すと、2 つのオーバーロードのどちらが必要かを推定できません。mixed_dispatchfun_impl

質問: 呼び出される関数からタグ ディスパッチを分離する他の方法はありますか?

C++11 可変個引数テンプレート/Boost.Fusion または現在のコードを簡素化するその他のウィザードリィを使用する提案を受け入れます (この特定のディスパッチを使用するすべての関数に対して、2 つの代わりに 3 つのヘルパー関数を維持する必要があります。複雑なディスパッチにより、ヘルパー関数の数がさらに速くなります)。

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

c++ - boost::phoenix::insert の結果の評価

boost::phoenix::insert要素をマップに挿入する結果を評価しようとすると、問題が発生します。通常std::map::insertの と同様に、によって返されるアクター オブジェクトboost::phoenix::insertも を返しますstd::pair<Iterator where, bool result>。挿入が成功したかどうかを確認するために、そのペアの 2 番目の要素に興味があります。この問題を示す大幅にストライプ化されたコード例は次のとおりです。

MSVC2012 とブースト 1.53 を使用すると、次のエラーが発生します。

clang3.2 は同じエラーを報告します:

挿入の結果を正しく評価する方法のアイデアが不足しています。どんな助けでも大歓迎です。

編集: 私の質問のより広い文脈は、boost::spirit::qi を使用して C++ のような列挙を解析しようとしているということです。同じことを達成しようとする私が見つけた例は、重複した列挙メンバーをチェックしません。以下は、関連する 2 つのルールを含むコード スニップです。

0 投票する
3 に答える
2834 参照

c++ - boost ::fusion :: for_eachを適用して、可変関数オブジェクトを使用してboost ::fusion::vectorを実行します

私はboost::fusion::vectorを使おうとしています。しかし、私は非常に単純な問題に悩まされています。

operator()のがでstruct A変更xされることに注意してくださいstruct A。gcc 4.7.2は、... \ include \ boost \fusion \ alarmithm \ iteration \ detail \ for_each.hpp:77:エラー:「constA」を「this」引数として「voidA :: operator()(」として渡すことを警告します。 const T&)[with T =int]'は修飾子を破棄します[-fpermissive]

これに対する解決策はありますか?