問題タブ [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.
c++ - 可変個引数テンプレートでの宣言の使用
この質問は、この回答で提案されているように、boost::variantのラムダビジターを実装するための優れた方法である多重継承オーバーロード疑似あいまいさに対する次のソリューションに触発されています。
私は次のようなことをしたいです:
パック型リストにusing句を追加する正しい構文が何であるかわかりません。このusing句は、コンパイラがあいまいであると文句を言うのを防ぐために重要ですがoperator()、それらはすべて異なる署名を持っているため、まったくそうではありません。
c++ - C++11 の非型可変引数関数テンプレート
非型の可変個引数テンプレートを使用するブログ投稿を見ました(現在、gcc ではサポートされておらず、clang のみでサポートされています)。
投稿の例は正常にコンパイルされますが、関数テンプレートで動作させることができませんでした。
正しい構文を理解するのを手伝ってくれる人はいますか (存在する場合)?
c++ - Variadic テンプレート - 不完全型
このコードを持つ:
gcc 4.6.1 からエラーが発生しています:
エラー: ネストされた名前指定子で不完全な型 'Are_Same' が使用されています。
Are_Same<A,C...>::valueそうすることで、最後に単純に展開される再帰呼び出しを呼び出すと思いましたAre_Same<A,B>。明らかにそうではありません。誰が私がどこで間違っているのか知っていますか?
c++ - 可変個引数テンプレートに追加された新しい構文エンティティの名前は何ですか?
C++11 で導入された可変個引数テンプレート
Argsとの名前はparams? それらの 1 つ (少なくとも?) が可変個引数テンプレート パックと呼ばれることは知っていますが、それはどれですか? そして、もう一方は何と呼ばれていますか?
c++ - 引数のない可変個引数テンプレートのあいまいなオーバーロード
関連している:
次の可変個引数テンプレートのペアを検討してください。
これは機能し、コンパイルされます。しかし、最初のテンプレート パラメータなしでどのように記述すればよいでしょうか。
些細なことに聞こえますか?まあ、それは私が思ったことです。:-) いくつかのアイデアを考えてみましょう。
アイデア #1:
うまくいかない...これを試みたとき、私は専門化を念頭に置いていましたが、2番目の考えでは、それがどのように機能するかではありません。
元の例では、オーバーロードの 2 つの異なるテンプレートを作成しました。最初は 1 つのテンプレート パラメーターを取り、2 つ目は 2 つ以上を取ります。あいまいさも専門性も関係ありません。私はそれを正しく理解していますか?
アイデア #2:
空であることは非テンプレート関数の呼び出しに展開されないため、明らかに機能All<rest...>しません。rest...
アイデア #3:
ソリューションを少し再構築しましょう。
All(c) はあいまいになるため、これは使用できません。したがって、引数が 0 の場合と引数が 0 より大きい場合が必要です... または、引数が 1 の場合と引数が 1 より大きい場合はどうでしょうか。
アイデア #3.5:
うん、動作しますが、コピーパスタが含まれています (この場合は単純ですが、より大きくなる可能性があります!)。ちょうど別の回避策。
アイデア #4:
#1 を試してみましょう。ただし、関数の代わりにクラスを使用します。
クラスを専門化できるので、これは有望に見えます。でもねえ、それは何ですか?
申し訳ありませんが、実装されていません: 'rest ...' を固定長の引数リストに展開することはできません
これは GCC 4.4 のものではありませんか? 私は MinGW GCC 4.6.1 (tdm-1) を使用しています。
とにかく、そんな初歩的なことを素直にできないと思っていいのだろうか。このタスクを実行するには、ダミー テンプレート パラメータを追加して回避策を使用する必要がありますか?
または、ゼロ引数のケースを指定するための単純で正しいバリアントがありますか?
c++ - 可変長テンプレートパラメータを数値シーケンスでアンパックする方法は?
数値シーケンスでパラメーターパックをアンパックする方法 (または可能)? 例えば、
<--行を展開する必要がある
どこでn == sizeof...(T) - 1。
目的は、定義済みの型を持つタプルを受け入れる Boost.Python の __init__ 関数を作成することです。
c++ - 可変個引数テンプレートを使用したランダムピッカー機能-それは可能ですか?
C ++ 11の可変個引数テンプレートを使用して、一般化された「ランダムピッカー」機能を実現したいと思います。
このようなもの...
...任意の数のパラメーターを受け入れるように一般化されている場合を除きます(上記のように、それぞれ同じタイプですが、パラメーターとして任意のタイプを受け入れ、返されたときに選択したタイプを特定のタイプTに変換することもできます)。
テンプレート再帰を使用してtypesafeprintfなどを実現するという考えを理解しています。可変個引数テンプレートを使用して、上記のような関数を作成することもできますか?ヒントをいただければ幸いです。
c++ - 可変個引数テンプレートはコードの肥大化の可能性がありますか?
Variadic テンプレートを使用すると、特定の種類の関数をよりクリーンでタイプ セーフなバージョンに書き換えることができます。ウィキペディアprintfにある例のように、の場合です。
しかし...私がテンプレートを理解する限り、それらは型の組み合わせごとにコードの重複を意味します。したがって、上記printfの s の可変長バージョンは何度もコピーされます。これは、大規模な関数やクラスの場合はひどいものになる可能性があります。
可変個引数テンプレートは、コード複製の標準テンプレートと同じくらい危険ですか? はいの場合、継承のトリックはまだ役に立ちますか?
c++ - 可変個引数テンプレート-繰り返しを回避する方法はありますか
コード(貼り付けてコピーするだけ)では、テンプレート引数(コードでマークされた行)の繰り返し/リストを回避する方法があります: