12

私は現在、可変個引数テンプレートのサポートでできることのいくつかに頭を悩ませようとしています。私はこのような機能を持っているとしましょう -

template <typename ... Args>
void foo(Args ... a)
{
    int len = sizeof...(tail);
    int vals[] = {a...};
    /* Rest of function */
}

/* Elsewhere */
foo(1, 2, 3, 4);

このコードは、引数が整数になることを事前に想定しているため機能しますが、他の何かを指定すると明らかに失敗します。パラメータパックに特定のタイプが事前に含まれていることがわかっている場合、テンプレートなしで次のような方法で実行できる方法はありますか-

void foo(int ... a)

私はこれを試みましたが、コンパイラは foo が void フィールドであるというエラーを出しました。再帰を介してパック内のパラメーターにもアクセスできることはわかっていますが、これで問題が解決するかどうかはわかりません。つまり、同じ型の可変数の引数を取得できるようにしたいということです。

4

5 に答える 5

15

これはうまくいくはずです:

void foo(int);

template<typename ...Args>
void foo(int first, Args... more)
{
   foo(first);
   foo(more...);
}
于 2015-06-26T15:55:16.733 に答える