C++에서 템플릿 함수의 변수에 대한 기본값을 정의 할 수 있습니까? 다음과 같은C++ 템플릿 함수 기본값
뭔가 :
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
C++에서 템플릿 함수의 변수에 대한 기본값을 정의 할 수 있습니까? 다음과 같은C++ 템플릿 함수 기본값
뭔가 :
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
을보십시오이 : 또한 T에 넣을 수 있습니다
template<class T> T sum(T a, T b, T c=T())
{
return a + b + c;
}
(5)의 경우 정수형을 기대하고 기본값을 5로 설정합니다.
예!
그러나 T는 무엇이 될 수 있는지 또는 쓸모가 있는지에 대해 최소한 생각해야합니다. 이는 금지되어 즉
당신은 함수 템플릿 매개 변수의 기본값을 설정할 수 없습니다 :
template<typename T=int> void f(T a, T b);
예, 거기에 넣는 값은 T
인 생성자 만 있으면됩니다. 보여준 코드를 감안할 때 아마 그 인수가 0
이 되길 원한다고 가정합니다. 생성자에 둘 이상의 인수가 필요한 경우 T(arg1, arg2, arg3)
을 기본값으로 사용할 수 있습니다.
모든 유형에 대해 수행 할 수있는 가정에 따라 다릅니다.
첫 번째 경우는 T
이 기본 구성 가능하다고 가정합니다. 값 초기화 (IIRC)이며 기본적으로 0
인 POD 유형의 경우 sum(5, 7)
은 sum(5, 7, 0)
입니다.
두 번째 경우에는 유형을 정수로 구성해야합니다. 정수형의 경우 sum(5, 7)
은 sum(5, 7, 5)
에 해당하는 sum(5, 7, int(5))
을 호출합니다.
예. 기본값을 정의 할 수 있습니다.
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를 사용할 수 없습니다.
기본 인수는 사용 된 경우에만 인스턴스화됩니다. 즉, 'T'와 전혀 호환되지 않는 미친 물건을 넣을 수 있다는 의미입니다. 명시적인 인수를 전달하는 한 괜찮습니다. –