問題タブ [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++ - 複雑な (ネストされた) 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 > とは異なる型情報を失うようです。
タグ、サイズなど、指定するものがありませんでしたか? ありがとう!
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」をループすると、すべてのノードのコンストラクターが正常に呼び出されます。ありがとう!
c++ - boost::fusion::for_each 使用時の引数の受け渡し/バインディング
boost::fusion::vector のすべての要素に対して関数を呼び出したいと思います。要素は次のようなタイプです。
この関数は、次の方法で各要素に対して呼び出すことができます。
ただし、print_all()
ヘルパー クラスを含めるこの実装はかなり見苦しく、複雑すぎるようです。C++0x が許可されていると仮定すると、それを実装する正しい方法は何ですか?
c++ - BOOST_FUSION_ADAPT_STRUCT が正しい数の引数を取らない
Boost::Spirit を使用して、一部のテキストを構造体に解析しています。これには、テキストを解析して構造体に直接格納するために BOOST_FUSION_ADAPT_STRUCT を使用する必要があります。マクロは 2 つの引数を取ることを知っています。最初の引数として構造体名、2 番目の引数としてすべての構造体メンバーです。そして、私はそれらの2つだけを渡しています。しかし、コンパイルエラーが発生します。
これがコードスニペットです。コード全体が必要な場合はお知らせください。
ありがとう。
これは私が解析しようとしているルールです。
c++ - 実行時シーケンスと融合シーケンス間の相互作用
さらに私の質問C++ Tuple of Boost.Range - get Tuple of element types?
私は次のものを持っています:
すべてのコンテナー (メタとランタイムの両方) は sizeN
です。次のことを行うコードを書きたいと思います。
Fusion のtransform
操作を使用してこれを記述しようとしましたが、問題は、ファンクターが操作対象の要素のインデックスを認識していないように思われます。
私は次のようなことを考えました:
indices
どういうわけかFusionシーケンスを含むことができればうまくいくかもしれませんint 0...N
それで、誰かが昇順を作るのを手伝ってくれますか、それとも私の目標を達成するためのより良い方法を見つけることができますか? どうもありがとう。
c++ - Boost.Fusionシーケンスから継承できますか/継承する必要がありますか?
独自のシーケンスクラスを実装するためにFusionシーケンスから継承できますか/すべきですか?いいえの場合、なぜですか?
例えば:
c++ - ブーストライブラリを使用して、std ::find_ifとstd::mapを連携させるにはどうすればよいですか?
この質問は、この質問を提起する別のトピックから着想を得ています。
マップコンテナからユーザー指定値より大きい最初の値を検索します
これはいくつかの方法で解決できます。典型的なC++03ソリューションは、専用の関数(またはファンクター)を定義し、それをstd::find_if
3番目の引数として渡します。
C ++ 11では、専用関数(またはファンクター)の定義を回避でき、代わりに次のように使用できますlambda
。
これは受け入れられた答えです。
私はまだ短くてクールな解決策を探しています。それがベクトルの場合、私はそれを利用するクールなソリューションを学び、Boost.Phoenix
ソリューションは非常に簡潔になります(ideone demo):
これは名前空間でarg1
定義されたファンクターオブジェクトであり、式は別のファンクターに評価され、それがに渡されます。boost::phoenix::arg_names
arg1>4
std::find_if
簡単なテストは(ideone)、
私の質問は、同様の方法で地図の問題を解決したいということです。そのような解決策はありますか?何かのようなもの:
または、
それが機能するためには、式は引数at<1>(arg1) > 2
を取るファンクターに評価される必要があります。const std::pair &
私の腸の感覚は、ブーストがこの解決策を持っていることを教えてくれます。:-)
c++ - boost::fusion::for_each の関数オブジェクトが std::for_each と異なる
新しいコンパイラにアップグレードしてコンパイラ エラーを解決しboost::fusion::for_each
ているときに、渡された関数オブジェクトに operator が必要であることに気付きましたconst
。
Boostの例:
これはもちろん変わっていません。std::for_each
演算子が である必要がない とは違うことに気づきませんでしたconst
。
を必要とする明確な理由はありconst
ますか? 明らかにそれを変更することはできませんが、これら 2 つの違いの理由を理解したいと思います。
洞察と説明をありがとう!
c++ - フェニックス アクターをフュージョン呼び出し可能オブジェクトとしてブーストする
呼び出し可能なフェニックス アクターを作成して、それらをフュージョン シーケンスで使用できるかどうか疑問に思っていました。次のソースを考えると:
これは期待どおりに機能します。
しかし、次のようにフェニックスでポリモーフィックな呼び出し可能なアクターを作成できるため:
フェニックスを使用して FusionCaller 構造体を取り除くことができるかどうか疑問に思っていました。このような:
fusion::for_each(fmap, /* some magic phoenix expression*/);
それで、これはフェニックスでまったく可能ですか?