[모던C++입문] 3.10 가변 템플릿
- 📕 Book/모던C++입문
- 2021. 7. 16.
3.10 가변 템플릿(Variadic Template)
- 가변 템플릿은 ...으로 표시된 줄임표 연산자를 사용
- 왼쪽에 ... 연산자가 있으면 패킹 오른쪽에 ... 연산자가 있으면 언패킹
- typename ...P : 복수의 타입 인수를 타입 팩 P에 패킹
- <P...> : 클래스나 함수템플릿을 인스턴스화 할때 P를 언패킹
- P ...p : 변수 팩 p에 여러 함수 인수를 패킹
- sum(p...) : 변수 팩 p를 언패킹하고 여러 인수로 sum함수 호출
- 리턴타입은 첫번째 인수의 타입으로 정해짐
template<typename T>
inline T sum(T t) { return t; }
template<typename T, typename ...p>
inline T sum(T t, P ...p)
{
return t + sum(...p);
}
auto s = sum(-7, 3.7f, 9u, -2.6);
cout << "s is " << s << " and its type is " << typeid(s).name() << endl;
//s is 2 and its type is int
auto ss = -7 + 3.7f + 9u + -42.6; //ss는 double 타입 값은 3.1반응형