問題タブ [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 投票する
1 に答える
1615 参照

c++ - 複雑な (ネストされた) mpl シーケンスから変換された boost::fusion::result_of::as_set (または as_vector)

::boost::mpl::vector< node_a, node_b, node_c > のような単純な mpl シーケンスから融合シーケンスへの変換は正常に機能します。しかし、後処理された mpl シーケンスを複雑な mpl シーケンス (ネストされた mpl ベクトルなど) から融合シーケンス (result_of::as_set または as_vector を介して) に変換しようとすると、コンパイル時にエラーが発生しました。

「restored_set_type」の出力は次のとおりです。

、しかし、単純な mpl シーケンス ::boost::mpl::vector< node_c, node_b, node_a > とは異なる型情報を失うようです。

タグ、サイズなど、指定するものがありませんでしたか? ありがとう!

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

c++ - boost ::fusion :: result_of ::as_set<>のインスタンスはその要素のコンストラクターを呼び出さない

このコードはコンパイルされます。私の質問は、「fusion_set_type」のインスタンスを作成すると、その融合セット内のすべての型のコンストラクターが呼び出されることになっているということです。ただし、この「fusion_set_type」は、含まれている型のコンストラクターを呼び出しません。ネストされた折り畳み/変換操作に何か問題がある可能性があります。「node_set_type」の結果は「structnode_c、struct node_a、struct node_b」であり、mpl :: for_eachと関数オブジェクトを使用して「node_set_type」をループすると、すべてのノードのコンストラクターが正常に呼び出されます。ありがとう!

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

c++ - boost::fusion::for_each 使用時の引数の受け渡し/バインディング

boost::fusion::vector のすべての要素に対して関数を呼び出したいと思います。要素は次のようなタイプです。

この関数は、次の方法で各要素に対して呼び出すことができます。

ただし、print_all()ヘルパー クラスを含めるこの実装はかなり見苦しく、複雑すぎるようです。C++0x が許可されていると仮定すると、それを実装する正しい方法は何ですか?

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

c++ - BOOST_FUSION_ADAPT_STRUCT が正しい数の引数を取らない

Boost::Spirit を使用して、一部のテキストを構造体に解析しています。これには、テキストを解析して構造体に直接格納するために BOOST_FUSION_ADAPT_STRUCT を使用する必要があります。マクロは 2 つの引数を取ることを知っています。最初の引数として構造体名、2 番目の引数としてすべての構造体メンバーです。そして、私はそれらの2つだけを渡しています。しかし、コンパイルエラーが発生します。

これがコードスニペットです。コード全体が必要な場合はお知らせください。

ありがとう。

これは私が解析しようとしているルールです。

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

c++ - 実行時シーケンスと融合シーケンス間の相互作用

さらに私の質問C++ Tuple of Boost.Range - get Tuple of element types?

私は次のものを持っています:

すべてのコンテナー (メタとランタイムの両方) は sizeNです。次のことを行うコードを書きたいと思います。

Fusion のtransform操作を使用してこれを記述しようとしましたが、問題は、ファンクターが操作対象の要素のインデックスを認識していないように思われます。

私は次のようなことを考えました:

indicesどういうわけかFusionシーケンスを含むことができればうまくいくかもしれませんint 0...N

それで、誰かが昇順を作るのを手伝ってくれますか、それとも私の目標を達成するためのより良い方法を見つけることができますか? どうもありがとう。

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

c++ - Boost.Fusionシーケンスから継承できますか/継承する必要がありますか?

独自のシーケンスクラスを実装するためにFusionシーケンスから継承できますか/すべきですか?いいえの場合、なぜですか?

例えば:

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

c++ - ブーストライブラリを使用して、std ::find_ifとstd::mapを連携させるにはどうすればよいですか?

この質問は、この質問を提起する別のトピックから着想を得ています。

マップコンテナからユーザー指定値より大きい最初の値を検索します

これはいくつかの方法で解決できます。典型的なC++03ソリュ​​ーションは、専用の関数(またはファンクター)を定義し、それをstd::find_if3番目の引数として渡します。

C ++ 11では、専用関数(またはファンクター)の定義を回避でき、代わりに次のように使用できますlambda

これは受け入れられた答えです。

私はまだ短くてクールな解決策を探しています。それがベクトルの場合、私はそれを利用するクールなソリューションを学び、Boost.Phoenixソリューションは非常に簡潔になります(ideone demo):

これは名前空間でarg1定義されたファンクターオブジェクトであり、式は別のファンクターに評価され、それがに渡されます。boost::phoenix::arg_namesarg1>4std::find_if

簡単なテストは(ideone)、


私の質問は、同様の方法で地図の問題を解決したいということです。そのような解決策はありますか?何かのようなもの:

または、

それが機能するためには、式は引数at<1>(arg1) > 2を取るファンクターに評価される必要があります。const std::pair &私の腸の感覚は、ブーストがこの解決策を持っていることを教えてくれます。:-)

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

c++ - boost::fusion::for_each の関数オブジェクトが std::for_each と異なる

新しいコンパイラにアップグレードしてコンパイラ エラーを解決しboost::fusion::for_eachているときに、渡された関数オブジェクトに operator が必要であることに気付きましたconst

Boostの例:

これはもちろん変わっていません。std::for_each演算子が である必要がない とは違うことに気づきませんでしたconst

を必要とする明確な理由はありconstますか? 明らかにそれを変更することはできませんが、これら 2 つの違いの理由を理解したいと思います。

洞察と説明をありがとう!

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

c++ - フェニックス アクターをフュージョン呼び出し可能オブジェクトとしてブーストする

呼び出し可能なフェニックス アクターを作成して、それらをフュージョン シーケンスで使用できるかどうか疑問に思っていました。次のソースを考えると:

これは期待どおりに機能します。
しかし、次のようにフェニックスでポリモーフィックな呼び出し可能なアクターを作成できるため:

フェニックスを使用して FusionCaller 構造体を取り除くことができるかどうか疑問に思っていました。このような: fusion::for_each(fmap, /* some magic phoenix expression*/);

それで、これはフェニックスでまったく可能ですか?