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

두 번째 foo 함수를 인스턴스화하는 데 템플릿 메커니즘이 필요합니다. 기능의 서명은 사용시에만 결정되기 때문입니다. 여기에서 요구할 수있는 유일한 기능은 템플릿 매개 변수 팩이 int으로 제한되는 함수 템플릿을 구문에 포함한다는 것입니다.

템플릿 키워드가없는 템플릿에는 상당한 반대가 있습니다. 그러나 개념 TS와 관련하여 상황이 달라질 것입니다.

관련 문제