問題タブ [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.
templates - C++ で任意の長さの型リストからテンプレートを作成する
入力できるようにしたいのは次のとおりです。
Boost::mpl にはシーケンスがあり、これを実行できますが、実行する必要はありません。
内部が「醜い」または冗長であることは気にしませんが、最終的にwatchKeysを使用する方法が非常にシンプルで直感的であることを望んでいます. ブーストがどのようにそれを行っているかもわかりませんが、それは私とテンプレートの間にマクロのレイヤーがあるためのようです.
これについてどうすればよいですか?タイプの数ごとにテンプレートの巨大なリストを作成したくないのですが、それが唯一の方法である場合は...
編集:やりたいことを実行する方法がないことはかなり確信しました(ほとんどですが、可変数のマクロ引数を持つことはできません)が、質問は依然として有用で有益な回答を生成しています.
c++ - c ++再帰的なmpl :: equal問題?
型の再帰をサポートする mpl::equal のようなプロシージャが必要です。
上記は正常にコンパイルされますが、mpl::transform または mpl::fold で使用すると、Visual Studio 2010 rc1 が文句を言います。
ただし、これらは機能します...
mpl::equal が動的に生成された再帰型で機能しないということですか、それとも私の構文に何か問題がありますか?
アドバイスをいただければ幸いです。
c++ - boost::mpl::list をループする方法は?
これは私が得た限りです、
これを完了するにはどうすればよいですか? ( std::for_each を使用する必要があるかどうかはわかりません。ここでの別の回答に基づく推測です)
c++ - mpl::transform を mpl::string に適用する方法は?
に変換を適用しようとしていますmpl::string
が、コンパイルできません。MS VC++2010 と Boost 1.43.0 を使用しています。コード:
完全なエラー メッセージをhttp://paste.ubuntu.com/447759/に投稿しました。
MPL ドキュメントには、mpl::transform
が必要でありForward Sequence
、mpl::string
私Bidirectional Sequence
が収集した は のタイプであると書かれているのでForward Sequence
、うまくいくと思いました。
私は何か間違ったことをしていますか、それともこれは完全に不可能ですか? もしそうなら、なぜですか?
ありがとう!
c++ - 可変数のテンプレートパラメータを使用するための最良の方法は何ですか?
これを考慮してください-おそらく不十分に書かれた-例:
と :
これにより、次の構文を使用してコールバックを追加できます。
それは完璧に動作します。私の「Command」クラスは、undo、redo、progress reportなどの実装など、すべてのコマンドに共通する多くのことを実行しますが、読みやすくするためにコードから削除しました。
今私の質問は簡単です:この呼び出しを置き換えることができるように、コマンドクラスを書き直す方法はありますか?
のようなものによって:
私はそれについてたくさん考えてきましたが、概念的な問題があります:コマンドクラスを次のようにテンプレート化したかった
しかし、明らかに、ここに問題があります。構文template <typename R,typename T1, typename T2, ..., typename Tn>
は合法的なC ++、AFAIKではありません。
次のように、n個のバージョンのコマンドを作成する必要がありますか?
等々 ?(これが実際に機能するかどうかさえわかりません)
または、これを行うための別のよりエレガントな方法はありますか?ここで言及されている構文は、そこで使用されていますか?(関数f;)
私はロキのタイプリストを見てきました、そして彼らは仕事をしているようです。しかし、私はブーストでそれを見つけることができません。私はboost::mplがタイプリストを実装するために使用したいものであるとウェブ上で読みました、しかし私はMPLドキュメントによって少し混乱していますか?
これに関する洞察はありますか?よろしく、D。
c++ - boost::mpl::lambda を使用して、静的な const メンバー変数に基づいて boost::mpl::list から型を削除する
次のように定義されたタイプのリストがあります。
果物を含まない 2 番目のリストを作成したいと思います。つまり、最初のリストから形成された結果のリストには、単一タイプの Brick が含まれます。果物は、型内で定義された static const 変数によって識別されます。
私は現在、メタ関数クラスを作成し、boost::mpl::remove_if
. boost::mpl::lambda を使用して別のRemoveFruit
構造体の必要性を取り除くことで、これをよりエレガントにすることができるはずです。これを行う方法に関する提案はありますか?
現在の完全なコード:
c++ - boost::mpl を使用した型の組み合わせ
タイプのリストがあり、そこから 2 つの要素を持つすべての組み合わせのリストを作成します。例えば:
ここでは、 、またはであるpair<T1,T2>
可能性があります。これを行う方法?それを考えると、重複を取り除くことにも興味があります。
ありがとう。std::pair<T1,T2>
mpl::vector<T1,T2>
pair<T1, T2> == pair<T2, T1>
c++ - 変数の型を取得するには?
例:
ありがとう!
c++ - C++ブーストバリアントの質問
私はそれがその背後にあるものをboost::variant
使用しboost::mpl
、mpl互換のtypedefを持っていることを知っていますtypes
。
単純なtypedefがあるとしましょう:typedef boost::variant<bool, int> Variant;
今、私は別のテンプレート関数を持っています、例えば:
T
この関数は、一部の場合とそうでない場合の2つの場合で異なる動作をするようにしVariant::types
ます。
明らかに、私は次のようなことをしなければなりません
私が知らない唯一のことはこれCONDITION
です。
T
さて、がの一部である場合、コンパイル時のクエリを作成することは可能だと思いますVariant::types
。
誰かが方法を知っていますか?
c++ - boost :: mpl::vectorからboost::fusion::vectorのインデックスを取得する
私はブーストフュージョンとmplライブラリをいじり始め、非常に単純な問題で立ち往生しました。
私は次のタイプを宣言しました:
ここで、FusionVectorから値を取得する関数を作成したいと思いました。
関数は期待どおりに機能しますが、boost :: mplベクトルからインデックスを取得してこの関数で使用し、テンプレートパラメーターとして関数に渡さないようにします。しかし、私はこれをどのように行うかを今のところ理解していませんでした。
誰かが私にヒントを教えてもらえますか?