問題タブ [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++ - Boost Fusionの記事、例、チュートリアル?
boost ::fusionライブラリの使用法に関する優れたリソース/記事/例を知っていますか?
Boost Fusionは非常に興味深く見えます。それがどのように機能し、基本をどのように使用するかは理解していると思いますが、記事やブログ(boost.org自体は別として)などの興味深い使用法/実践を示すリソースを探しています。
c++ - mpl::vector から fusion::vector を生成する
fusion::vector
から生成する方法はmpl::vector
? mpl::vector
から生成する方法はfusion::vector
?
generate_fusion_vector
とgenerate_mpl_vector
メタ関数が必要です。私は独自のメタ関数を書くことができますが、それらは既に存在していると思われます。
fusion::map
以前にhelpで生成した経験がありresult_of::as_map
ましたが、現在のboost(trunk、1.39も)ではこんなエラーが出ます。
私は何が起こっているのか理解できませんか?
c++ - boost::mpl::fold を boost::fusion::map で使用するにはどうすればよいですか?
これをコンパイルしようとすると:
次のエラーが表示されます。
Fusion のドキュメントから: 「Fusion は MPL との完全な互換性を提供します。Fusion シーケンスは MPL シーケンスに完全に準拠しており、MPL シーケンスは Fusion と完全に互換性があります。タイプのみで作業したい場合は、MPL で Fusion シーケンスを使用できます。」
boost::mpl::map を渡すと機能します。
手がかりはありますか?
c++ - Boost.MPL と型リストの生成
バックグラウンド
これは、ゲーム エンジンのメモリ マネージャー用です。私はfreelist
実装しており、これらの場合はコンパイル時のリストが必要です。(たとえば、MPL または融合ベクター)。はfreelist
割り当てサイズに対応し、定数より小さいサイズのオブジェクトを割り当て/割り当て解除すると、対応する に移動しfreelist
ます。
結局のところ、これは小さなオブジェクトが一定時間の割り当てと一定時間の割り当て解除をグローバルに償却したことを意味します。(わーい。)
問題
問題は必要な型を生成することなので、最終的には Fusion を使用してそれらの型をインスタンス化する可能性があります。使用されているタイプは次のとおりです (短縮など):
は、最小値から最大値までの 2 のべき乗サイズのfreelist
を管理します。data_block
だから私が欲しいのは:
これを生成するには:
明らかに、これを手動で行うこともできますが、より一般的で微調整可能なインターフェイスのために、それは避けたいと思います。コードでの Fusion ベクターの使用も、ハードコードされたメンバーよりも簡単です。
質問
これについて最善の方法がわかりません。これまで MPL を広範囲に使用したことはありません。何か案は?範囲を作ったり、remove_if
2 の累乗ではないなど、いくつかの悪いアイデアがありましたが、確かにそれは最善ではありません。代わりに、毎回倍増して結果ベクトルにプッシュする再帰的なものでしょうか? どうすればいいのかわかりません。
c++ - ブーストフュージョン:ベクターの要素数に応じた奇妙な問題
個人的なプロジェクトで Boost::Fusion (Boost v1.42.0) を使用しようとしています。このコードで興味深いエラーが発生します。
コンパイルに失敗します (gcc 4.4.1):
しかし、ベクトルとメソッドの引数の数を 6 から 5 に変更すると、int,float,float,char,int,int
問題int,float,float,char,int
なくコンパイルできます。
引数の最大数が制限されているのではないかと疑っていましたが、定義して変更しようとしましたがFUSION_MAX_VECTOR_SIZE
成功しませんでした。
何が間違っているのかわかりません。これを再現できますか?ブーストバグでしょうか(疑いますが、不可能ではありません)?
c++ - boost ::fusion :: push_backの適切な使用法は何ですか?
for_each(newStuff、chug())を機能させるにはどうすればよいですか?
(注: boost ::fusionに関する非常に短いドキュメントから、 push_backを呼び出すたびに新しいベクトルを作成することになっていると想定しているだけです。)
c++ - 異種コンテナでboost::fusion:: transformを使用する方法は?
Fusion::transformのBoost.orgの例は次のとおりです。
しかし、私は「それを理解している」わけではありません。それらの例のベクトルには、すべて同じタイプの要素が含まれていますが、融合を使用する主なポイントは、異種タイプのコンテナーです。彼らがmake_vector(1, 'a', "howdy")
代わりに使用した場合はどうなりますか?
int operator()(int t)
になる必要があります
template<typename T> T& operator()(T& const t)
しかし、どのようにresult_typeを記述しますか?template<typename T> typedef T& result_type
確かに有効な構文ではありません。関数に関連付けられていないため、有効な構文であっても意味がありません。
c++ - Boost.Fusion Functional:デフォルトの引数を使用して関数を呼び出す
boost ::fusion :: invoke関数を使用して、デフォルトの引数を持つ関数を指定せずに呼び出すことは可能ですか?
スクリプト言語にバインドするためのラッパーを作成しています。デフォルトの引数を使用すると、ラッパーのユーザーの直感的な感覚が大幅に向上します。規格はこのケースをカバーしていませんが、私は恐れています。
補足:
ファンクターを使用して回避できることはわかっています。
ただし、デフォルトの引数を指定するためだけにユーザーにファンクターを作成させたくないので、これはオプションではありません。