問題タブ [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.
haskell - Boost.Fusion に相当する Haskell
私は、完全にタイプセーフな AST のために GADT などを使用して、Haskell で完全に型指定された DSEL を作成して遊んでいます。正しく型指定されたコンパイラを実行するには、Haskell 型から型と値の両方 (型付き環境) へのマップなどの構造が必要なようです。など、Haskell の型システムで理解できます。C++ には、これらのような構造 (型->値マップ、型付き値のベクトルなど) を備えた Boost.Fusion ライブラリがあります。Data.Tuple はシーケンスを処理しますが、Boost.Fusion などmap
の Haskell バージョンはありますか?
c++ - fusion::vector + fusion::push_back = fusion::vector?
2 つの要素を持つベクトルを型定義します。次に、他の要素に push_back し、結果の型もベクトルであると予想します。しかし、そうではありません。
例:
http://liveworkspace.org/code/361492801eebe24cc5679a1e899a5240
私は何を間違っていますか?
よろしく。
c++ - nviewsのベクトルの戻り型を理解する方法
私は次の問題を抱えています:
予想されるのは、Tがフォワードシーケンスのシーケンス(例:boost ::fusion :: vector)であり、Tの各要素のN番目の要素のビューを取得したいということです。boost::fusion::vector
ただし、例えば boost::fusion::vector<int, double>
やの種類は事前にわかりませんboost::fusion::vector<int, double, std::string>
。コードでは正しい型を理解できますが、関数宣言ではこれを理解できません。
ありがとう !
コード改善のための提案も歓迎します。:)
c++ - Boost.Fusion シーケンスの要素を別のシーケンスから初期化する
別のシーケンスの要素でそれぞれ 1 つずつ初期化する必要がある要素の Boost.Fusion シーケンスがあります。Fusion を使用しない場合、これは次のようになります。
Fusion ベクトルでこれを実現するための私の唯一のアイデアは、次のようなものです
このアイデアでは、 for のmagic_functor
結果タイプがあり、その で構築を実行します。ただし、キャスト先の正しい型を知る必要があるため、ロジックが重複します。Bi
Ai
operator()
magic_functor
初期化を融合化するより良い方法はありますか?
c++ - boost ::fusion::mapを使用したconstの正当性に関する問題
私はboost::fusion::mapを使用するいくつかのクラスを書いています。以下に、簡略化されたコードを示します。
および別のクラス:
「問題!」を探してください。上記のコードのコメントで。そのメソッドでは、コンパイラはメソッドのconst修飾子を無視し、非constバージョンのobj_m.get()を呼び出して、次のようなことを実行できるようにします。
この方法はconstなので、これは正しくありません。次に、コンパイラにconstバージョンを呼び出させるために、obj_mへのconst参照が宣言されます。今文
コンパイルエラーが発生します。これまでのところ、これは現在の方法では問題ではありませんが、定数の正確性には不便であり、明らかに望ましくありません。
なぜこれが起こっているのか考えていますか?ありがとう!
c++ - fusion::at_c または fusion::at_key を fusion::filter_if の結果に適用する方法は?
プロジェクトでboost::fusionを使用しています。それを使用するのは初めてで、物事は複雑になっています。遊んで、私は次のプログラムを書きました:
ご覧のとおり、とてもシンプルです。「ERROR」が続く2行のコメントを外さない限り、正常に動作します。最初のコメントを外すと、次のエラーが発生します。
2番目のコメントを外すと、次のようになります。
filter_if オンライン ドキュメントによると、フォワード シーケンスのモデル (ベクトルの場合) または連想シーケンスのモデル (マップの場合) を返します。したがって、エラーが発生している 2 行は正常に動作するはずです。ここで明らかな何かが欠けていると思いますが(おそらくインクルードですか?)、動作させることができません。
あなたの助けを前もって感謝します
c++ - std::vector を異種の boost::fusion ベクター型データで埋める
私はブーストとメタプログラミングが初めてなので、私の問題は次のとおりです。
これはほとんどの人にとって非常にばかげた質問かもしれませんが、なぜこれがコンパイルされないのですか? my_row ベクトルを通常の std::vector に格納できるものに変換する必要がありますか?
また、誰かがメタプログラミングとブーストに関する素晴らしい入門書を教えてくれますか?
オンラインマニュアルのウェブサイトは本当にゴミだと思います。少なくとも、C++ や STL に全く慣れていない人にはそう見えますが、'struct' 宣言や '::' および '<>' の使用に慣れていない人にはそう見えます。一般に、ブーストを使いにくくし、初心者にとって理解するのを難しくするすべてのこと。
c++ - コピーせずに、融合ベクトルの std ベクトルから列を返す
std::vector
すべての要素が で表される「テーブル」がありboost::fusion::vector
ます。std::vector
値をコピーせずに、このテーブルの「列」の表現を として返す必要があります。これを行う最善の方法は何ですか?n が列番号である nviewsを構築しようとしてstd::vector
いますが、機能していないようです。私は正しい軌道に乗っていますか、それとも他の方法がありますか?
c++ - c++ブーストmpl/fusionベクトル動的push_back
私は TMP の世界に不慣れで、ブースト mpl または融合でのベクターの使用に関して助けが必要です。
だからここに状況があります:
ランタイム ライブラリとして実装されているマルチスレッド環境での非同期関数呼び出し用の API があります。関数には可変数の引数があります。
したがって、アプリケーションのコードは次のようになります。
ライブラリは、いくつかの内部データ構造に引数の値を格納し、ライブラリによって決定された将来のある時点で関数を実行します。いくつかの最適化を実装するには、特定のアプリケーションで考えられるさまざまな数の引数をすべて把握し、引数の数を含む const 配列を作成する必要があります。したがって、コンパイル中に次のようなものを作成する必要があります。
async_call を可変個引数テンプレート関数として実装し、内部的に引数の数をカウントします (いくつかのテンプレート メタプログラミングを使用して、送信された各関数の count_args<...>
ここで質問があります。グローバル MPL または FUSION ベクトルに count_args<...> の結果を入力してから、それを const 配列に変換できますか?
次のように、ブースト プリプロセッサが MPL ベクトルから const 配列を生成することを提案するコードを見てきました。
したがって、mpl ベクトルをグローバルに宣言します。
そして、次のように async_call 関数 (main から呼び出される) から push_back を試みます。
ただし、push_back によって返された新しいシーケンスで argsTable を何とか「更新」する必要があるため、ベクトルは更新されません。これはできますか?MPL で十分ですか、それとも融合が必要ですか?
解決策に関する他の提案は大歓迎です!
c++ - Fusion の呼び出しと SFINAE をブースト
boost::fusion::invoke()
特定の Fusion シーケンスが機能するかどうかに基づいて、部分的なクラス テンプレートの特殊化を実現したいと考えています。しかし、この場合の置換失敗はエラーのようです。
is_callable_with_these_sequence_parameters<F, Seq>
機能するメタ関数が必要だと思います。誰でも助けることができますか?