問題タブ [parameter-pack]
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++ - パラメーター パックの型と積分の両方のキーワード
特殊化 (つまり、テンプレート化された型) を検出する特性がある場合:
これは期待どおりに機能します。
パラメータ パック タイプの 1 つが実際に値である場合を除きます。
これは、template <typename...> class U
宣言が特にtypes用であるためです。切り替えた場合、すべての値を受け入れるようになりますが、型と値template <auto...> class U
の混合を取ることができると宣言する方法はありますか?
c++ - パラメータ パックを扱うときに省略記号が必要になるのはいつですか?
cppreference.com のコードを理解しようとしています。該当部分はこちら
上記を正しく解釈している場合((os << tupleArgs << (++n != sizeof...(Ts) ? ", " : "")), ...)
、コンマ演算子に対する折り畳み式です。意味的には([some pattern involving the parameter pack's values] , ...)
、コンマで折りたたむことを意味します。
しかし、私が得られないのは、なぜsizeof
そこにあるのsizeof...
ですか?私にとって省略記号は展開を意味しますが、そこを展開したくありません。Ts
タプルに似た集約型のようなものです。コンパイラが折り畳みを評価している間、その集約型のコンパイル時のサイズが必要です。実際、Visual Studio では、省略記号の有無にかかわらず、どちらの方法でも機能します。GCCでも同じだ、とGodboltは教えてくれました。(編集:実際には、コンパイルする省略記号がないと間違っていますが、出力には存在しないはずの末尾のコンマが含まれています)
sizeof...
パラメータパックのサイズが必要な場合は、常に使用するルールですか?