問題タブ [boost-mpl]
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++ - C++でMPLベクトルのすべてのメンバーのテンプレートを明示的にインスタンス化する方法は?
次のヘッダー ファイルを検討してください。
Foo::read
に含まれるすべての型のソース ファイルでメンバー関数テンプレートを明示的にインスタンス化する必要がありboost::mpl::vector
ます。
出来ますか?前もって感謝します、ダニエル。
編集
Foo::read<T>
私はいくつかの解決策を見つけました-変数が宣言されている構造体のコンストラクターにポインターを割り当てると、インスタンス化が発生するようです:
したがって、プロセスは次のように自動化できます。
しかし、このソリューションが移植可能で標準に準拠しているかどうかはわかりません。(Intel および GNU コンパイラで動作します。)
c++ - ブーストmplベクトルからのタイプの登録
boost :: mplを使用して最後の3行を自動的に生成するにはどうすればよいですか?自動的に、「同じ」行を3回繰り返す必要がないことを意味します
c++ - boost::mpl の説明が必要
フォールドの仕組みがわかりません。なぜ int_<0> なのですか? なぜ is_float< _2 > なのか?
誰かがこの「機能」を理解するための手がかりを教えてもらえますか? ありがとう
c++ - ブースト mpl 文字列
こんにちはブースト mpl ドキュメントで、mpl::string と次の例を発見しました。
C または C++ では、文字' ?
それは正常で有効ですか?
c++ - mpl::map をループする
mpl::map をループする簡単な方法は何ですか?
m をループするにはどうすればよいですか?
c++ - Boost::MPL を使用して変数コンテナーを作成するのを手伝ってくれる人はいますか?
次のように、任意の衝突オブジェクトを任意の衝突オブジェクトに処理する物理システムを作成しました。
使いやすくするためのヘルパー オブジェクトが他にもいくつかありますが、要点は、静的オブジェクトと他の動的オブジェクトに対してテストする必要がある動的オブジェクトがあり、静的オブジェクトはチェックする必要がないということです。
私が欲しいのは次のようなものです:
add 関数を使用してコンテナーを推測したいので、システムを使用するとタイプ リストが自動的に更新されます。テンプレート関数を使用してタイプリストを生成する方法はわかったと思いますが、必要な場所やコンパイルのどの時点でそれを取得するかはわかりません。
そうでない場合は、2 つのタイプリストを使用するシステムが更新関数を内部的に記述して、すべてのリストを反復処理し、それらを相互にペアリングします。
私はブースト MPL の本をいくつか読み、Andrei の本を数回読みました。しかし、私はそれがどのように機能するかに夢中になっているようで、実際にそれをどのように使用するかには変換していません. MPLの本に実世界の例に関するセクションがもう1つあればいいのにと思います。
ゲーム エンジンのすべての部分を、レンダリング、物理、衝突 (検出と反応を分けています)、入力、ネットワーク、サウンドなどと相互作用させることができました。すべて一般的な方法で行います。今、私はすべてのものを一般的な方法で保持する必要があります。すべての汎用的な作業の後、コンテナーに何かを保持できるようにするためだけに継承を要求するのはばかげています。コレクションのすべての可能性をコードに渡したくありません。これは汎用プログラミングの大きな利点の 1 つです。
Jalf は、MPL を使用して同様のことを行っていることを示していましたが、それを理解するのに十分なほど詳しく説明していませんでした。誰かが実際の使用例を知っているか、MPL の使用に関する詳細情報を入手できる場所を知っていれば、私は感謝します。
再度、感謝します!
アップデート
boost MPL と boost Fusion はどちらも私が望んでいるように見えますが、どちらのライブラリの実際の良い例もほとんどないようです。MPL のドキュメントは、このテンプレートがこれを行う以上のものではありません。その意味を理解してください。フュージョンは、「例を示しますが、これは氷山の一角にすぎません!」の方が少し優れています。
ブースト MPL の典型的な例は、has_xxx です。この例では XXX と xxx を使用しているため、XXX (必要なテキスト) と Test または CheckType またはその他の識別可能なユーザー タイプを xxx の代わりに使用できる場合の違いが分かりにくくなっています。さらに、これが名前空間にないことは言及されていません。スコット・マイヤーズがこれをサイコのシャワーシーンと比較した理由がわかりました.
私がコンパイルして理解したことは本当に便利なことなので、本当に残念ですが、製品を出荷していた場合、これほど多くの労力を費やすことは決してないでしょう。
誰かが実際の例やより良い参考文献、説明、またはチュートリアルを知っていれば、私は感謝しています.
アップデート
より多くのコードは次のとおりです。
それを使用するには、これを行います
次に、すべてのアクティブ オブジェクトとパッシブ オブジェクトに対して、すべてのアクティブな衝突可能オブジェクトで衝突を呼び出すだけです。
関数名を追加するとコードがわかりやすくなるため、 std::function は使用していません。しかし、それは単なるレガシー思考なのかもしれません。
c++ - Boost :: MPLで型の知識が消えるのはなぜですか?
私は次のコードを持っています、そしてそれはうまくいきます。
しかし、私がこのように変更すると:
エラーエラーC2440が発生します:'static_cast':'const Generate'から'wrap&'に[T=int]で変換できません
メインで動作するのに、モジュールに入れても動作しないのはなぜですか?タイプリストによって作成されたデータの値を使用して、タイプリストによって駆動される一連のテンプレート関数によって呼び出される場所にデータを取得するにはどうすればよいですか。基本的に、2つの部分で何か役立つオブジェクトを作成するにはどうすればよいですか?
c++ - テンプレートの解決順序のルールを誰かに説明してもらえますか?
わかりました。ここで疑似コードを完成させてください。
つまり、この関数がインスタンス化されると、いつでもsome_meta_typelistオブジェクトが大きくなるという考え方です。これが境界を越えて行われる場合、タイプリストがおそらくMPL :: fold関数で使用される前に、このテンプレート構築メカニズムへのすべての呼び出しがコンパイルされるという保証はありますか?これらはいつ評価され、いつ行われたことを確認できますか?これはコンパイル単位に限定し、.cppの境界を越えないようにする必要がありますか?静的変数を使用して関数を呼び出し、使用前にオブジェクトが作成されていることを確認するのと同じことはありますか?
アップデート
私は、システムを呼び出すオブジェクトが、システムがその作業を行うために必要なタイプリストを作成するという考えを見ています。私の考えでは、タイプリストは完全にコンパイル順序に依存するため、単一ファイルのCPPを超える有効なアプローチではありません。MSVCはアルファベット順でコンパイルされるか、少なくとも以前はコンパイルされていたので、最終ファイルにZZZZ.cppという名前を付けることができます。最終的には、完全にビルドされたタイプリストが必要なファイルを意味します。これは安全または互換性のあるソリューションではありません。これは本当ですか?回避策はありますか?
皆さんありがとう
c++ - テンプレートのブースト MPL リスト
クラス テンプレートのリスト、T 1、T 2、... T Nを取得し、クラスの MPL リストのリストを作成します。各テンプレートは同じパラメーターでインスタンス化されます。
boost::mpl::list
テンプレート テンプレート パラメーターのリストでは使用できません。通常の型パラメーターのみです。
したがって、以下は機能しません。
どうすればそれを機能させることができますか?
c++ - MPLを使用してすべてのテンプレート順列を作成する
私は次のテンプレート化されたクラス構造を持っています
Hostクラスは、次のタイプを持つことができるようになりました。
boost :: mplを使用してタイプリストを作成する方法はありますか?現時点では、どこから始めればよいのかさえわかりません。私の目標は、次のような機能を持つことです。
これはboost::mplで可能ですか?