C++11 で導入された可変個引数テンプレート
template <typename... Args>
void foo(Args... params) {
cout << sizeof...(Args) << endl;
}
Argsとの名前はparams? それらの 1 つ (少なくとも?) が可変個引数テンプレート パックと呼ばれることは知っていますが、それはどれですか? そして、もう一方は何と呼ばれていますか?
C++11 で導入された可変個引数テンプレート
template <typename... Args>
void foo(Args... params) {
cout << sizeof...(Args) << endl;
}
Argsとの名前はparams? それらの 1 つ (少なくとも?) が可変個引数テンプレート パックと呼ばれることは知っていますが、それはどれですか? そして、もう一方は何と呼ばれていますか?
FDIS、§14.5.3を部分的に引用します。
1テンプレートパラメータパックは、0個以上のテンプレート引数を受け入れるテンプレートパラメータです。
2関数パラメーターパックは、0個以上の関数引数を受け入れる関数パラメーターです。
3パラメーターパックは、テンプレートパラメーターパックまたは関数パラメーターパックのいずれかです。
4パック拡張は、パターンと省略記号で構成され、そのインスタンス化により、リスト内のパターンのインスタンス化が0個以上生成されます。
したがって、あなたの例では、
typename... Argsテンプレートパラメータパックです(したがって、パラメータパックでもあります)Args... paramsは関数パラメーターパックです(したがって、パラメーターパックでもあります)sizeof...(Args)はパック拡張でありArgs、はパターン(このコンテキストでは識別子)です。