6

C++11 で導入された可変個引数テンプレート

template <typename... Args>
void foo(Args... params) {
    cout << sizeof...(Args) << endl;
}

Argsとの名前はparams? それらの 1 つ (少なくとも?) が可変個引数テンプレート パックと呼ばれることは知っていますが、それはどれですか? そして、もう一方は何と呼ばれていますか?

4

1 に答える 1

12

FDIS、§14.5.3を部分的に引用します。

1テンプレートパラメータパックは、0個以上のテンプレート引数を受け入れるテンプレートパラメータです。

2関数パラメーターパックは、0個以上の関数引数を受け入れる関数パラメーターです。

3パラメーターパックは、テンプレートパラメーターパックまたは関数パラメーターパックのいずれかです。

4パック拡張は、パターンと省略記号で構成され、そのインスタンス化により、リスト内のパターンのインスタンス化が0個以上生成されます。

したがって、あなたの例では、

  • typename... Argsテンプレートパラメータパックです(したがって、パラメータパックでもあります)
  • Args... params関数パラメーターパックです(したがって、パラメーターパックでもあります)
  • sizeof...(Args)パック拡張でありArgs、はパターン(このコンテキストでは識別子)です。
于 2011-11-01T20:24:29.793 に答える