2010-07-21 6 views
4

C++에서 템플릿 함수의 변수에 대한 기본값을 정의 할 수 있습니까? 다음과 같은C++ 템플릿 함수 기본값

뭔가 :

template<class T> T sum(T a, T b, T c=????) 
{ 
    return a + b + c; 
} 

답변

8

을보십시오이 : 또한 T에 넣을 수 있습니다

template<class T> T sum(T a, T b, T c=T()) 
{ 
    return a + b + c; 
} 

(5)의 경우 정수형을 기대하고 기본값을 5로 설정합니다.

0

예!

그러나 T는 무엇이 될 수 있는지 또는 쓸모가 있는지에 대해 최소한 생각해야합니다. 이는 금지되어 즉

당신은 함수 템플릿 매개 변수의 기본값을 설정할 수 없습니다 :

template<typename T=int> void f(T a, T b); 
1

예, 거기에 넣는 값은 T 인 생성자 만 있으면됩니다. 보여준 코드를 감안할 때 아마 그 인수가 0이 되길 원한다고 가정합니다. 생성자에 둘 이상의 인수가 필요한 경우 T(arg1, arg2, arg3)을 기본값으로 사용할 수 있습니다.

5

모든 유형에 대해 수행 할 수있는 가정에 따라 다릅니다.

첫 번째 경우는 T이 기본 구성 가능하다고 가정합니다. 값 초기화 (IIRC)이며 기본적으로 0 인 POD 유형의 경우 sum(5, 7)sum(5, 7, 0)입니다.

두 번째 경우에는 유형을 정수로 구성해야합니다. 정수형의 경우 sum(5, 7)sum(5, 7, 5)에 해당하는 sum(5, 7, int(5))을 호출합니다.

+2

기본 인수는 사용 된 경우에만 인스턴스화됩니다. 즉, 'T'와 전혀 호환되지 않는 미친 물건을 넣을 수 있다는 의미입니다. 명시적인 인수를 전달하는 한 괜찮습니다. –

2

예. 기본값을 정의 할 수 있습니다.

template <class T> 
T constructThird() 
{ 
    return T(1); 
} 

template <class T> 
T test(T a, 
     T b, 
     T c = constructThird<T>()) 
{ 
    return a + b + c; 
} 

불행히도 constructThird는 인수로 a 및 b를 사용할 수 없습니다.