問題タブ [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++ - Boost.Variant、Boost.MPL: タイプを追加する方法は?
boost.Any に基づくこの格子コードを見て、助けにはなりませんが、代わりにBoost.Variantを使用できるかどうか疑問に思います。そのようなAPIが可能かどうか疑問に思います:
つまり、コンパイラは最後に次のようにコンパイルする必要があります。
アップデート:
私が試したこと (このバリアント ドキュメントとこのMPL デモとドキュメントに基づく):
しかし、2 つの同じエラーでコンパイルに失敗します。
c++ - C++ Boost MPL: vector と callnot 内部関数を取り除く方法は?
私はBoost.MPLを学んでいて、始めたばかりです。解決策がobviosである場合は、ご容赦ください。私はそのようなサンプルを見ます:
boost::mpl::vectorそして、 FooALL を呼び出すときに(それを に変えるa.FooAll<int, float, long>();)、各引数に対していくつかの静的/グローバル/またはクラス内部関数を呼び出すときにどのように取り除くのか疑問に思わずにはいられません*thisが、それは私を混乱させませんか?
c++ - 各機能と無料機能のmplをブースト
このコードがコンパイルされない理由:
同じクラスの無料の関数でboostmplfor_eachを機能させる方法は?
c++ - T が無効になる可能性がある場合、ブーストで sizeof(T) を安全に取得するにはどうすればよいですか?
関数テンプレートで T が関数プロトタイプである場合、T の戻り値のサイズを決定するコードをコンパイルする方法を理解しようとしています。
ただし、 sizeof(void) は有効な操作ではないため、コンパイルされません。型が void の場合にサイズ 0 を返す if ステートメントを作成しようとしてもです。私は BOOST MPL にかなり慣れていないので、しばらくドキュメントを閲覧していましたが、if_ や apply_if などの他の if を適用する方法や、これらが機能するかどうかがわかりません。
ありがとう。
c++ - Boost :: MPL VectorおよびFor_Each:avectorをタプルとして出力する方法は?
したがって、そのような文字列として出力したいmpl :: vector(たとえばcout)があると想像してくださいint, string, char。boost :: mplでそのようなことを行う方法は?
c++ - MPL シーケンスをブーストして定義: MPL シーケンスを定義文字列に変換する方法は?
合計数 (疑似コード) を知っている要素を 1 つずつ定義に出力できることを理解しています。
しかし、boost::mpl シーケンスのすべての要素に対してそのような操作を自動化するにはどうすればよいでしょうか? (Vectorについては疑問ですが、任意のmplシーケンスタイプに対して1つの一般的な答えがあると思います)
c++ - boost :: mplを使用して、「空」ではないテンプレートクラスの数を取得し、この番号でマクロを呼び出すにはどうすればよいですか?
boost::mpl::eval_if空でないテンプレート引数の数を与えることができる(または同様の関数)の結果に応じて、いくつかの引数を使用してマクロを呼び出したいと思います。次のような擬似コードがあるとします。
引数の数に応じて、クラスをコンテンツで埋めようとしていますEmptyType。Boost.MPL/プリプロセッサまたは他のBoostライブラリを介してC++03でそのようなことをどのように行うことができるのだろうか?
c++ - boost::mpl typelist 関数の適用
typelist 内のすべての型に対して実行したい関数があります (現在は mpl リストで表されています --- これはそれに近づくための合理的な方法ですか?)
ここで重要なのは、関数が実際のデータではなく型のみを気にすることです。その型の静的関数を呼び出して情報を取得し、後で参照できるようにそれをハッシュ テーブルに押し込みます。
ただし、私が知る限り、mpl にはこれを行う手段がありません --- 私が見つけることができる最も近いのは mpl for_each 演算子ですが、各型の実際のインスタンス化で使用したいようです。タイプ自体ではありません。
Loki ライブラリには「適用」関数がありました。これは、多かれ少なかれ私が探しているものです。型リスト内の型へのポインターをパラメーターとして渡して推論を支援することで、インスタンス化の問題を回避しましたが、完全なインスタンス化。その機能を得るには、MPL で何を見ればよいですか? それとも、明らかな何かが欠けていますか?
c++ - 派生クラスのテンプレート引数の変更
以下のコードでは、Cの基本クラスB1のテンプレート引数OFFSETはB0に依存し、B2はB1に依存します。
これは、Cのインスタンスが作成されるたびに(mainメソッドで)手動でコードを記述することによって行われます。代わりに、この機能をCの定義に移動する方法はありますか?
編集:
コメントに答えるために、これを解決するために取られる必要があると私が思うステップはここにあります:
オフセットを変更できるメタ関数を記述します。set_new_offsetは、Tに対してタイプT<2>を定義します。
boost :: mpl :: timesを使用して、新しいオフセットを計算します
テンプレートマジックを追加...
c++ - 後でマクロで呼び出す関数のリストを収集する
私は、C++ の列挙型を簡単にするための小さなライブラリを作成しています。構文は次のようなものです。
このマクロは、たとえば次のアクセスを許可するクラス MyEnum を作成します。
追加のデータ (文字列など) を列挙値に格納するなど、さらにいくつかの機能があります。
マクロは完成して機能しますが、上記のように定義するのは簡単ではありません。このためには、後で呼び出すことができる ENUM_VAL マクロを使用して初期化関数のリストを作成する方法が必要です。次の boost::mpl アプローチのようなもの:
このように list##(__COUNTER__-1) は最後に Init##Name 型を含み、最後に mpl foreach を使用してすべての格納された型で init() を呼び出すことができます。
今の問題はネーミングです。マクロのインスタンス化ごとに __COUNTER__ を 2 回使用する必要があり、これによりカウンターが 2 回インクリメントされます。さっき検索して知った
- C プリプロセッサは、変数に名前を付けるときに (__COUNTER__-1) を計算しません
- インクリメントせずに __COUNTER__ を読み取る方法はありません。
そのため、後で呼び出すことができる関数のリストを収集する別の方法が必要です。