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

haskell - Boost.Fusion に相当する Haskell

私は、完全にタイプセーフな AST のために GADT などを使用して、Haskell で完全に型指定された DSEL を作成して遊んでいます。正しく型指定されたコンパイラを実行するには、Haskell 型から型と値の両方 (型付き環境) へのマップなどの構造が必要なようです。など、Haskell の型システムで理解できます。C++ には、これらのような構造 (型->値マップ、型付き値のベクトルなど) を備えた Boost.Fusion ライブラリがあります。Data.Tuple はシーケンスを処理しますが、Boost.Fusion などmapの Haskell バージョンはありますか?

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

c++ - fusion::vector + fusion::push_back = fusion::vector?

2 つの要素を持つベクトルを型定義します。次に、他の要素に push_back し、結果の型もベクトルであると予想します。しかし、そうではありません。

例:

http://liveworkspace.org/code/361492801eebe24cc5679a1e899a5240

私は何を間違っていますか?

よろしく。

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

c++ - nviewsのベクトルの戻り型を理解する方法

私は次の問題を抱えています:

予想されるのは、Tがフォワードシーケンスのシーケンス(例:boost ::fusion :: vector)であり、Tの各要素のN番目の要素のビューを取得したいということです。boost::fusion::vectorただし、例えば boost::fusion::vector<int, double>やの種類は事前にわかりませんboost::fusion::vector<int, double, std::string>。コードでは正しい型を理解できますが、関数宣言ではこれを理解できません。

ありがとう !

コード改善のための提案も歓迎します。:)

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

c++ - Boost.Fusion シーケンスの要素を別のシーケンスから初期化する

別のシーケンスの要素でそれぞれ 1 つずつ初期化する必要がある要素の Boost.Fusion シーケンスがあります。Fusion を使用しない場合、これは次のようになります。

Fusion ベクトルでこれを実現するための私の唯一のアイデアは、次のようなものです

このアイデアでは、 for のmagic_functor結果タイプがあり、その で構築を実行します。ただし、キャスト先の正しい型を知る必要があるため、ロジックが重複します。BiAioperator()magic_functor

初期化を融合化するより良い方法はありますか?

0 投票する
0 に答える
268 参照

c++ - boost ::fusion::mapを使用したconstの正当性に関する問題

私はboost::fusion::mapを使用するいくつかのクラスを書いています。以下に、簡略化されたコードを示します。

および別のクラス:

「問題!」を探してください。上記のコードのコメントで。そのメソッドでは、コンパイラはメソッドのconst修飾子を無視し、非constバージョンのobj_m.get()を呼び出して、次のようなことを実行できるようにします。

この方法はconstなので、これは正しくありません。次に、コンパイラにconstバージョンを呼び出させるために、obj_mへのconst参照が宣言されます。今文

コンパイルエラーが発生します。これまでのところ、これは現在の方法では問題ではありませんが、定数の正確性には不便であり、明らかに望ましくありません。

なぜこれが起こっているのか考えていますか?ありがとう!

0 投票する
0 に答える
1498 参照

c++ - fusion::at_c または fusion::at_key を fusion::filter_if の結果に適用する方法は?

プロジェクトでboost::fusionを使用しています。それを使用するのは初めてで、物事は複雑になっています。遊んで、私は次のプログラムを書きました:

ご覧のとおり、とてもシンプルです。「ERROR」が続く2行のコメントを外さない限り、正常に動作します。最初のコメントを外すと、次のエラーが発生します。

2番目のコメントを外すと、次のようになります。

filter_if オンライン ドキュメントによると、フォワード シーケンスのモデル (ベクトルの場合) または連想シーケンスのモデル (マップの場合) を返します。したがって、エラーが発生している 2 行は正常に動作するはずです。ここで明らかな何かが欠けていると思いますが(おそらくインクルードですか?)、動作させることができません。

あなたの助けを前もって感謝します

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

c++ - std::vector を異種の boost::fusion ベクター型データで埋める

私はブーストとメタプログラミングが初めてなので、私の問題は次のとおりです。

これはほとんどの人にとって非常にばかげた質問かもしれませんが、なぜこれがコンパイルされないのですか? my_row ベクトルを通常の std::vector に格納できるものに変換する必要がありますか?

また、誰かがメタプログラミングとブーストに関する素晴らしい入門書を教えてくれますか?

オンラインマニュアルのウェブサイトは本当にゴミだと思います。少なくとも、C++ や STL に全く慣れていない人にはそう見えますが、'struct' 宣言や '::' および '<>' の使用に慣れていない人にはそう見えます。一般に、ブーストを使いにくくし、初心者にとって理解するのを難しくするすべてのこと。

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

c++ - コピーせずに、融合ベクトルの std ベクトルから列を返す

std::vectorすべての要素が で表される「テーブル」がありboost::fusion::vectorます。std::vector値をコピーせずに、このテーブルの「列」の表現を として返す必要があります。これを行う最善の方法は何ですか?n が列番号である nviewsを構築しようとしてstd::vectorいますが、機能していないようです。私は正しい軌道に乗っていますか、それとも他の方法がありますか?

0 投票する
0 に答える
696 参照

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 で十分ですか、それとも融合が必要ですか?

解決策に関する他の提案は大歓迎です!

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

c++ - Fusion の呼び出しと SFINAE をブースト

boost::fusion::invoke()特定の Fusion シーケンスが機能するかどうかに基づいて、部分的なクラス テンプレートの特殊化を実現したいと考えています。しかし、この場合の置換失敗はエラーのようです。

is_callable_with_these_sequence_parameters<F, Seq>機能するメタ関数が必要だと思います。誰でも助けることができますか?