2012-12-14 3 views
4

가변 개수의 인수를 취하는 함수를 작성해야합니다.이 함수는 본질적으로 snprintf 함수와 비슷한 래퍼입니다. Passing variable number of arguments around과 같이 일반적으로이 작업을 수행하는 방법을 알고 있습니다.명명 된 매개 변수가없는 C++의 함수에 가변 개수의 인수를 전달하는 방법

C에서 최소한 가변 인수가 시작되기 전에 하나의 명명 된 매개 변수를 함수에 전달해야합니다 (Why is void f(...) not allowed in C?).

그러나 같은 질문에 대한 대답은 C++에서 쉽게 가능하다고 말합니다. 나는 이것을 달성하는 방법을 궁금해했다. 특히 vararg 함수를 다루는 방법이 C (va_start, 등)과 같기 때문에 그렇다. 아니면 그들은 variadic 템플릿을 언급하고 있습니까?

기본적으로 명명 된 arguements가없는 variadic 함수를 작성할 수 있습니까? 그렇다면 어떻게됩니까?

void f(...){ 
    ... 
} 

p.s. 가능한 경우 C++ 03을 사용하여이 작업을 수행하려고합니다.

답변

4

C++ 언어는 매개 변수 목록이 ...으로만 구성된 쓰기 기능을 허용하지만 언어는 (...) 매개 변수 목록으로 선언 된 함수에서 인수에 액세스 할 수있는 방법이 없습니다.

기본적으로 C++의 이러한 함수는 과부하 해결에서 동작합니다 (... 매개 변수는 모든 매개 변수 유형과 일치 함). 이러한 함수의 본문은 인수에 액세스 할 수 없습니다. 그러한 기능을 사용하지 않는다면 사용하지 마십시오.

이러한 함수는 잘 알려진 템플릿 메타 프로그래밍 기법에서 실행되지 않는 컨텍스트에서 사용되는 경우가 많으며이 경우 정의되지 않아도됩니다. 단순한 선언만으로 충분합니다.

+0

[SFINAE] (http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error) 용도로만 사용 하시겠습니까? 재미있는 –

관련 문제