問題タブ [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 ::fusion :: result_of ::as_set<>のインスタンスはその要素のコンストラクターを呼び出さない
このコードはコンパイルされます。私の質問は、「fusion_set_type」のインスタンスを作成すると、その融合セット内のすべての型のコンストラクターが呼び出されることになっているということです。ただし、この「fusion_set_type」は、含まれている型のコンストラクターを呼び出しません。ネストされた折り畳み/変換操作に何か問題がある可能性があります。「node_set_type」の結果は「structnode_c、struct node_a、struct node_b」であり、mpl :: for_eachと関数オブジェクトを使用して「node_set_type」をループすると、すべてのノードのコンストラクターが正常に呼び出されます。ありがとう!
c++ - C++はコンパイル時に整数を文字列に変換します
私はこのようなことをしたい:
ブーストMPLライブラリでこれが可能になるようですが、これを使用してこれを達成する方法が本当にわかりませんでした。これは可能ですか?
c++ - mpl::vector を使用して boost::variant 型を定義する
ライブラリboost::variantを使用して多数の型を格納しています。どんどん種類が増えていき、もうすぐ20種類が限界です。ドキュメントでは、 を使用してバリアントを定義することが可能であるように見えますmpl::vector. バリアント定義を次のように置き換えようとしました。
私は自分のコードを直接入れています。ほとんどのタイプは、データがほとんど含まれていない構造体です。
コンパイルすると、奇妙なことが起こりました:
以前のバリアント定義は正常に機能していたので、置換が機能しないことに驚いています。私は初めてなmplので、何かが足りないのかもしれませんが、何が見つかりません! 私はうまくやっていますか?
前もって感謝します。
c++ - C++ は仮想関数の上書きを禁止します
ライブラリのクラス A を使用しており、独自のクラス B を介していくつかの機能を追加したいと考えています。クラス B のユーザーは、クラス A から派生するかのようにクラス B から派生する必要があります。
したがって、誰かが B から派生したクラス C を作成する場合、func2 を実装する必要があります。
私のアプリケーションでは、クラス C が func1 を上書きせず、B::func1() を削除しないことが非常に重要です。
B のすべての子クラスに対して、この仮想関数の上書きを禁止する方法はありますか? プレーンな C++ でない場合、この関数が上書きされたときにコンパイラ エラーをスローするブースト MPL に何かありますか?
c++ - 任意のマップからのmapped_typeへのポインタまたは参照の取得
編集:問題の解決策を見つけて書き留めましたが、解決策がまだ理想的ではない可能性があるため、質問には回答していません。
マップのマップでルーチンを実行するように設計された小さなライブラリを作成していますが、(マップの value_type の second_type に応じて) マップのマップのタイプに関係なく、mapped_type (std::map、boost::ptr_map など)。
さらに詳しく説明するために、いくつかの入力タイプと必要な出力タイプを表にしました。
私のコードは、ケース A、B、D、E には合格しますが、ケース C と F には失敗します。
これを行うためにboost::mplを使用しようとしています。これはこれまでに作成したものですが、両方のバージョンのコードを使用して同じエラーが発生します。
エラー。
マップへのポインターではない左辺値を処理するための構造体の変更された特殊化。
c++ - 実行時に ctor 引数を選択する
mpl を使用して実行時に引数を選択する次のシナリオに対処することは可能ですか?
理想的には、
c++ - 型のリストから継承し、継承されたメンバーのリストでメンバーを呼び出す方法は?
次の構造を持つ一連のクラスがあります。
これらのクラスの 1 つ以上をクラス X に構成できるようにする必要があります。擬似コード:
たくさんの mpl が必要だと思いますが、あまり得意ではありません。私がやろうとしていることは実行可能ですか? コードサンプルは素晴らしいでしょう。
私の失敗: C++11 の機能を使用できないことを忘れていました。MPL ソリューションを探しています。
c++ - テンプレートパラメータの「部分適用」
次の「メイン」テンプレートがあります。
と一緒に使用したいテンプレートTT:
特に、次のようなものを使いたい
これは、テンプレートの一種の部分適用です。Boost.MPLにはこの種のものが含まれていることを私は知っています。問題は、TTと次のようなテンプレートを使用したコードがすでにあることです。
TTに供給されます。
したがって、問題は、既存のコードに最小限の変更を加えてS1どのように使用できるかということです。TTBoost.MPLの使用が必須の場合は、最適なソリューションを教えてください。
c++ - C++でのコンパイル時に型名を取得する
タイプ名を取得して、デバッグ用に印刷したいと思います。私は次のコードを使用します:
それはうまく機能しますが、不必要な実行時のオーバーヘッドがあると思います。コンパイル時に計算される人間が読める形式のタイプIDを取得する方法はありますか?私はこのように見える何かを考えています:
これは、タイプ名の文字列定数を返します。
c++ - boost::mpl::for_each のタイプ ラッパー エラー (Abrahams & Gurtovoy book のセクション 9.1.1)
次のコードは、David Abrahams と Aleksey Gurtovoy による著書 C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond のセクション 9.1.1 からほぼそのままコピーしたものです。
唯一の変更点は、通常の Boost テンプレート mpl::identity を使用して本から型ラッパー テンプレートを変更できるようにしたいということです。ただし、Microsoft Visual C++ Express 2010 (SP1) では、これを行うと謎のコンパイラ警告が表示されます。
型ラッパー テンプレートに「type」という名前の内部 typedef があるという事実に関係しているようです。その typedef を「Type」に変更する (または単にその行を削除する) と、コードが正しく機能します。この奇妙な動作について説明できる人はいますか?
の出力/I"C:\Program Files\boost\boost_1_47" /I"C:\Program Files\boost" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\mpl.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue: