2016-12-13 4 views
3
int foo(int i) 
{ 
    return i; 
} 

int foo(int i, int... n) 
{ 
    return i + foo(n...); 
} 

int main() 
{ 
    return foo(1, 2, 3); // error 
} 

なぜC++はこのような直感的な構文を許可しないのですか?なぜC++はテンプレート以外の関数で可変パラメータを使用できないのですか?

+1

これはあなたが探しているものですか? http://en.cppreference.com/w/cpp/language/variadic_arguments –

+1

@LarsNielsen私はそれを疑う、彼はタイプセーフな解決策を望んでいると思う。 –

+1

名前がすでにあるので、それは 'std :: array'または' std :: vector'か 'std :: list' ot _iterators abstraction_などですか? – skypjack

答えて

3

第2のfoo関数をインスタンス化するには、関数の署名は使用時にのみ決定されるため、テンプレートメカニズムが必要です。テンプレートパラメータパックのタイプがintに制限されている関数テンプレートが構文に含​​まれているということです。

しかし、テンプレートキーワードを持たないテンプレートにはかなりの反対があります。しかし、コンセプトTSに関しては変化します。

関連する問題