2016-12-13 3 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

Вам нужен механизм шаблона для создания второй функции foo, так как подпись функции определяется только тогда, когда она используется. Таким образом, единственная функция, которую вы можете задать здесь, заключается в том, что ваш синтаксис подразумевает шаблон функции, где пакет параметров шаблона ограничен типом int.

Существует значительное противостояние шаблонам, которые не имеют ключевого слова шаблона. Однако в этом отношении ситуация изменится с концепциями TS.