template <typename T, typename... Types>
처럼 0개 이상의 템플릿 인자를 나타내는 것
두 print 함수의 위치를 바꿔쓴다면 컴파일 오류가 발생한다. 이는 컴파일 시에, 자신의 앞에 정의된 함수들 밖에 보지 못하기 때문이다.
#include <iostream>
template <typename T>
void print(T arg) {
std::cout << arg << std::endl;
}
template <typename T, typename... Types> //템플릿 파라미터 팩
void print(T arg, Types... args) {// 함수 파라미터 팩
std::cout << arg << ", ";
print(args...);
}
int main() {
print(1, 3.1, "abc");
print(1, 2, 3, 4, 5, 6, 7);
}
sizeof...
전체 인자의 개수를 리턴
가변 길이 템플릿은 매우 편하지만 재귀 함수 형태이기 때문에 호출 종료 조건의 함수를 따로 만들어 줘야 한다. 이는 코드의 복잡도를 쓸데없이 늘리게 된다.
#include <iostream>
template <typename... Ints>
int sum_all(Ints... nums) {
return (... + nums);
}
int main() {
// 1 + 4 + 2 + 3 + 10
std::cout << sum_all(1, 4, 2, 3, 10) << std::endl;
}
return ((((1 + 4) + 2) + 3) + 10);
이렇게 해석됨단항 좌측 Fold
라 부름()
로 감싸주자return (... + nums);