問題タブ [variadic-templates]
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.
recursion - c++0x: Variadic Template テクニック
Variadic Templateを使用してユーザー定義リテラルを定義する準備をしています
GCC 4.7.0 はまだサポートさoperator ""
れていませんが、それまでは簡単な関数でこれをシミュレートできます。
残念ながら、私の再帰は間違った方法です。右端の値をシフトせず、左端の値をシフトする良い方法は思いつきません:
もちろん、これはまったく正しくありません。
私の再帰は、一番左の '1' ではなく、一番右の '1' を一番遠くに移動するからです。
それはおそらく私の小さなものですが、私には見えません。
- 行を修正できます
_bin<C>() | _bin<D,ES...>() << 1;
か? - それとも、すべてを転送し、後ですべてを元に戻す必要がありますか (良くありません)?
- または、私が見ることができない他の方法はありますか?
更新:再帰を逆に折りたたむことはできませんでしたが、発見しsizeof...
ました。動作しますが、完全ではありません。別の方法はありますか?
c++ - 関数テンプレートの特殊化を可変個引数テンプレート関数に渡す
関数テンプレートの特殊化のアドレスを通常のテンプレート関数に渡すのに問題はありません。
ただし、同じ特殊化を可変個引数テンプレートに渡そうとすると、次のようになります。
GCCで次のコンパイラエラーが発生します(4.6.1と4.7.0を試しました)。
なぜこれらのエラーが発生するのですか?
c++ - Variadic テンプレート コンテナー クラスでテンプレートなしのゲッターは可能ですか?
仮想の可変個引数テンプレート タプル クラスは、私が知る限り、テンプレート パラメーターでゲッターを使用する必要があります。
これは不便であり、エラーが発生する可能性があります。クラスを明示的に指定する必要がないように、クラスを構築する方法があると感じずにはいられません。
私が最初に考えたのは、おそらく何らかの事前計算済みリストの値Get()
と比較することによって、型を独自に把握する別のクラスをメンバー関数が返すことでした。typeid(Foo).name()
ただし、これはまだ実行前に実行する必要があり、コンパイル時にそのような処理を繰り返す方法がわかりませんでした。
タプルのように、型を明示的に指定する必要のないゲッターを持つ方法はありますか?
c++ - パラメータパックの各要素を変更し、それらからタプルを作成する方法は?
可変引数関数テンプレートで問題が発生しています。パラメーター パックの各要素を調べ、要素をパッケージ化し、パッケージ化されたすべての要素をタプルに詰め込んで返す必要があります。これが私がやりたいことの一般的な考え方です(戻り値の型は単なるプレースホルダーであり、どうなるかわかりません):
何か案は?
c++ - 可変個引数テンプレートと新しい
私はこのクラステンプレートを持っています:
これは1つのテンプレート引数では問題なく機能しますが、複数の引数では次のエラーが発生します。
この方法で可変個引数テンプレートを使用するにはどうすればよいnew
ですか?正しい構文は何ですか?
編集:私の質問は完全に明確ではなかったと思います。私が欲しいのはこれです:
私のコンパイラはclang163.7.1で、このフラグは次のとおり-std=c++0x
です。
g++ - g++ で可変個引数テンプレートを使用できますか (ただし、他の c++0x 機能は使用できません)。
可変個引数テンプレートはコンパイル時の機能であるため、ABI への影響や実行時の動作の変更はほとんどないと考えられます。これは可能ですか?
特に、boost::mpl::vector と boost::mpl::string のコンパイル時間が短縮されるという利点が必要です。
質問を言い換えます...
c++03 と c++11 のコードをライブラリに分けて混在させることはできますか? つまり、gcc 4.3 と互換性のあるかなりの数のサードパーティ製 c++ ライブラリを使用していますが、gcc 4.7 にも移行しており、可能/合理的な場合は c++11 機能を使用する予定です。それとも、c++11 と c++03 を混在させることは不可能ですか?
c++ - c++11でのメタ関数zipの実装
私は実際に、boost::fusionから使用するごくわずかな操作をサポートする最小限のライブラリを取得できるかどうかを確認しようとしています。
これが私がこれまでに持っているものです...
メタ関数のforeach
実装は簡単なので、私も簡単だと思いzip
ました。どうやら、これはそうではありません。
zip
このメタ関数を任意の数のタイプリストに一般化するにはどうすればよいですか?ここで必要なのは、パラメーターパックのパラメーターパックのようです。どうすればいいのかわかりません。
編集1:
の実装is_equal
...
同様のアプローチをとることもできるzip
と思います...zip
まだ試していませんが、家に帰ったらそうします。
編集2:
これが私が最終的にもっとエレガントに見えたと思ったものです。これは基本的にVaughnCatoのアプローチのバリエーションです。
これは操作として扱わzip
れfold
ます。
c++ - std :: min()およびstd :: max()のC++可変個引数テンプレートバージョンに関する考察
、のC++11可変個引数バージョンの実装について考察する必要がありstd::min
ますstd::max
。これが私の2つの選択肢です。ここでは、std::min
次のstd::max
ように置き換えるだけで同様に実装されstd::min
ますstd::max
。
重要な質問は、必要かcommon_type_min
どうかです。これにより、min()を1つの引数で呼び出すことができることに注意してください。これは混乱や問題を引き起こす可能性がありますか?
c++ - 可変個引数テンプレートを可変個引数関数に接着する
libc ++でGCCの実装されていない常にインライン化された可変個引数関数をバイパスする試みで、可変個引数テンプレート(snprintf、より正確には* _lバリアントなど)を可変個引数テンプレートでラップして、同様の効果を実現できると思いました。インスタンス化により、可変個引数関数のvarargsが入力され、関数を適切にインライン化できるようになります。問題は、可変個引数テンプレートを作成することについて最初にわからないことです。また、テンプレートの引数を個別の引数に変換する方法も確かにわかりません。
置き換えようとしているコードは次の形式です。
置き換えたいのは、次の形式のものです。
args...
に変換できない拡張が原因で、これは機能していtype
ませんva_list {aka char*}
。方法がない場合は、ハワードを信頼し、1つおよび2つの引数の常にインラインのテンプレートを実装する必要があります。これにより、必要なコードの量が実質的に2倍になります。
編集:おそらくそれをva_listに変換する方法std::tuple
はargs
ここで機能しますか?
c++ - 最初の n 個の可変引数関数の引数へのアクセス
私は次のコードを持っています:
sz
コンストラクター引数のジェネリック番号を受け取り、最初の数の引数をメンバー変数に割り当てるコンストラクターを作成したいv
私がやりたいことは、次のようにできるようにすることです:Vec<3> var(1.0,2.0,3.0);