問題タブ [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++ - タイプを列挙型にマッピング
コンパイル時のType -> Enum Series
マッピングを行うことは可能ですか?
例を示します。
たとえば、いくつかType
の列挙値があります。
そして今、どういうわけか次のよう
にEnum1
述べています。Enum4
Type
ここで、次のことを確認できるようにしたいと考えています (コンパイル時に mpl を使用して実行することをお勧めします)。
任意の型と列挙型が実際に相互にマップされている場合:
結果は次のようになります。
誰かがこれを実装する良い方法を知っているなら、私を助けてください。たぶん何かを使用してboost::mpl
いますが、よくわかりません。
ありがとう。
c++ - ベクター内の型をインスタンス化せずに実行時に mpl::vector を反復することは可能ですか?
通常、私はboost::mpl::for_each<>()
a をトラバースするために使用しますboost::mpl::vector
が、これには次のように宣言されたテンプレート関数を持つファンクターが必要です。
template<typename T> void operator()(T&){T::staticCall();}
これに関する私の問題は、オブジェクト T が によってインスタンス化されたくないということですfor_each<>
。T パラメータはまったく必要ありませんoperator()
。for_each<>
これを達成する方法はありますか、それともT 型のオブジェクトをテンプレート関数に渡さない代替手段はありますか?
最適には、operator() の定義を次のようにしたいと考えています。
template<typename T> void operator()(){T::staticCall();}
そしてもちろん、呼び出しの前に T をインスタンス化したくありません。その他のヒント/提案も大歓迎です。
c++ - 連結ブースト::mpl::文字列
boost::mpl::string を連結するにはどうすればよいですか? 次のコードではエラーが発生します。
完全なソースはこちら: http://liveworkspace.org/code/31902a4b1b0831d054119bc0b8923cb6 エラー:
source.cpp:3:0 からインクルードされたファイル: string.hpp: 'boost::mpl::push_back_impl< boost::mpl::string_tag のインスタンス化
::apply, boost::mpl::string<24930> >':boost/mpl/push_back.hpp:32:1:
'boost::mpl::push_back<boost::mpl::string<>からインスタンス化された、 boost::mpl::string<24930> ' boost/mpl/aux_/has_type.hpp:20:1:
'const bool boost::mpl::aux::has_type< boost::mpl::push_back, boost からインスタンス化::mpl::string<24930> >, mpl_::bool_ ::value' boost/mpl/aux_/has_type.hpp:20:1:
'boost::mpl::aux::has_type< boost::mpl::push_back, boost::mpl::string<24930> >, mpl_::bool_ からインスタンス化 ' boost/mpl/aux_/preprocessed/gcc/quote .hpp:56:5: 「boost::mpl::quote2< boost::mpl::push_back ::apply, boost::mpl::string<24930> >」からインスタンス化された boost/mpl/aux_/preprocessed/gcc /apply_wrap.hpp:49:1: 「boost::mpl::apply_wrap2< boost::mpl::quote2, boost::mpl::string<>, boost::mpl::string<24930> からインスタンス化」 /mpl/aux_/preprocessed/gcc/bind.hpp:207:21: 'boost::mpl::bind2< boost::mpl::quote2, mpl_::arg<1>, mpl_::arg<2 からインスタンス化> ::apply, boost::mpl::string<24930> >' boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:49:1: 'boost::mpl::apply_wrap2< boost::mpl::protect< boost::mpl::bind2, mpl_::arg<1>, mpl_::arg<2> >, 0 からインスタンス化boost::mpl::string<>, boost::mpl::string<24930> ' boost/mpl/aux_/preprocessed/gcc/apply.hpp:73:1: 'boost::mpl::apply2< からインスタンス化boost::mpl::push_back, mpl_::arg<2> >, boost::mpl::string<>, boost::mpl::string<24930> ' boost/mpl/aux_/preprocessed/gcc/fold_impl. hpp:87:85: 'boost::mpl::aux::fold_impl< 3, boost::mpl::v_iter< boost::mpl::vector, boost::mpl::string<25444>, boost からインスタンス化::mpl::string<25958> >, 0l , boost::mpl::v_iter< boost::mpl::vector, boost::mpl::string<25444>, boost::mpl::string<25958> >, 3l , boost::mpl::string<>, boost::mpl::push_back, mpl_::arg<2> > ' boost/mpl/ fold.hpp:39:18: 'boost::mpl::fold< boost::mpl::vector, boost::mpl::string<25444>, boost::mpl::string<25958> > からインスタンス化boost::mpl::string<>, boost::mpl::push_back, mpl_::arg<2> > ' source.cpp:18:2: ここからインスタンス化 string.hpp:207:53: エラー: 'value ' is not a member of 'boost::mpl::string<24930>' in boost/mpl/back_inserter.hpp:18:0, from boost/mpl/aux_/inserter_algorithm.hpp:18, from boost/ mpl/copy.hpp:20、string.hpp:26 から、source.cpp:3 から: boost/mpl/push_back.hpp: 'boost:: のインスタンス化中mpl::push_back< ブースト::mpl::push_back, boost::mpl::string<24930> >, boost::mpl::string<25444> ': boost/mpl/aux_/has_type.hpp:20:1 :
const bool boost::mpl::aux::has_type< boost::mpl::push_back< boost::mpl::push_back, boost::mpl::string<24930> >, boost::mpl:: からインスタンス化string<25444> , mpl_::bool_ ::value' boost/mpl/aux_/has_type.hpp:20:1:
'boost::mpl::aux::has_type< boost::mpl::push_back< boost::mpl::push_back< boost からインスタンス化::mpl::push_back, boost::mpl::string<24930> >, boost::mpl::string<25444> , mpl_::bool_ ' boost/mpl/aux_/preprocessed/gcc/quote.hpp:56 :5: 'boost::mpl::quote2< boost::mpl::push_back からインスタンス化
c++ - 属性を STL コンテナーに格納しますか?
次の形式の generic_pair というクラスがあるとします。
さて、問題は、これらのgeneric_pairsの束をSTLコンテナーに格納できるようにしたいのですが、コンテナー内のすべての < K, V > が同じタイプになるわけではありません。たとえば、一部の要素は < int, int > である場合があり、他の要素は < int , string > などである場合があります。問題は、これをどのように行うことができるかです。
私の最初の考えは、「タグ」を使用してカプセル化された型の階層を作成し、コンテナーをジェネリック型で宣言しますが、実際の要素は継承された型で宣言することです。例えば、
これを行うためのより良い、より正しい方法があると思いますか? 任意のアイデア、指示をいただければ幸いです。MPL または他の場所で同様の実装または関連するツール/手法を見たことがあれば、それも役に立ちます。(私はマクロを避けようとしています)
c++ - 型のテンプレート パラメーターに boost::mpl::list を適用する
次のように、さまざまな型への共有ポインターを含む boost::variant を必要とするクラスがあります。
現在、このクラスをコンパイルするには、次の形式のテンプレート パラメーターが必要です。
次のはるかに単純な定義をユーザーに許可し、クラス実装内で上記の例の形式に変換できるように、mpl リストを使用するにはどうすればよいですか?
c++ - ラムダのシグネチャをmplシーケンスとして推測する方法はありますか?
c ++ 0xラムダのシグネチャ、結果タイプ、パラメータータイプをBoost.MPLシーケンスとして推測する方法はありますboost::mpl::vector
か?たとえば、ラムダの場合
取得したいのですがboost::mpl::vector<void,float,int>
。
c++ - boost::mplを使用したタイプのリストの順列
特定のタイプリストの順列を含むリストを作成しようとしています。
以下のコードは、意図した結果がなくても、実際の入力から削除して新しいリストを生成する代わりに、指定されたリストを使用すると機能するようです。これは、以下のpermutation_helperとbroken_helperの違いによって示されます。
なぜmpl::remove
この状況で期待どおりに機能しないように見えるのか誰かが知っていますか?
関数から何が返されるかを決定するためにassertを使用しましたが、typelistは期待される結果ではありません。これは、assertがbroken_helperに対して返すメッセージです。
permutation_helperを使用した出力は、実際のリストです。
boost - 可変個引数テンプレート ベクトルの mpl スタイル copy_if メタ関数
通常のブースト mpl で正常に動作するメタ プログラムがあります。次のようになります。
可変個引数テンプレート ベクトル (mpl::vector) を使用してコンパイルしようとしています。そのために、ここにある可変個引数テンプレート ベクトルの実装を使用しています: https://svn.boost.org/svn/boost/sandbox/variadic_templates
いくつかのテストはありますが、レポで copy_if、remove_if、count_if の使用可能な実装を見つけることができませんでした。それらのメタプログラムはそこにありますが、私はそれらを見つけることができませんか? または、mpl プレースホルダーもサポートするように、そのうちの 1 つを実装するのを手伝ってくれませんか。事前にご協力いただきありがとうございます。
c++ - exp() 関数の boost::mpl 実装が必要です
どこで見つけられるか知っている人はいますか?そうでなければ、私は自分でそれを書かなければなりません。
ありがとう。
c++ - Boost :: MPLの実際の使用例?
Boost :: MPLの使用法(ラムダを除く)の実際の例を共有して、その目的と実際の使用法の分野をよりよく理解できるようにしてください。MPLドキュメントのチュートリアルには、次元分析の例がありますが、それはそのような学術的な例であるため、Boost::MPLの感覚とそれを効果的に使用できる時期を私に与えていない可能性があります。