Programming/CPP11&14
[C++11] 가변인자 템플릿을 위한 sizeof... 연산자
psychoria
2015. 3. 6. 19:00
반응형
가변인자 템플릿의 지원으로 템플릿을 작성하는 것이 더 편리하게 되었습니다.
C++11의 가변인자 템플릿에 대한 설명은 아래 링크를 통해서 참조할 수 있습니다.
2015/03/05 - [Programming/C++11&14] - [C++11] 가변인자 템플릿(Variadic Templates)
가변인자 템플릿이 추가되면서 sizeof...연산자가 추가되었습니다.
sizeof...은 기존의 sizeof와는 약간 다른 기능을 합니다.
sizeof...은 파라미터 팩의 수를 가져오는 역할을 합니다.
가변인자로 넘어온 파라미터를 파라미터 팩이라고 하는데 ...이 실제 몇 개의 인자인가 알 수 있습니다.
이전 가변인자 템플릿의 예제를 가져와서 조금 수정해 보도록 하겠습니다.
#include <iostream>
using namespace std;
void print()
{
cout << endl;
}
/*
template <typename T> void print(const T& t)
{
cout << t << endl;
}
*/
template <typename First, typename... Rest> void print(const First& first, const Rest&... rest)
{
if (0 <= sizeof...(rest))
{
cout << first << " ";
print(rest...); // recursive call using pack expansion syntax
}
else
{
print();
}
}
int main()
{
print(); // calls first overload, outputting only a newline
print(1); // calls second overload
// these call the third overload, the variadic template,
// which uses recursion as needed.
print(10, 20);
print(100, 200, 300);
print("first", 2, "third", 3.14159);
}
기존에 있던 print(const T& t)를 제거하고 가변인자 템플릿 함수의 내부를 수정했습니다.
sizeof... 연산자가 현재 몇 개가 파라미터 팩(rest)에 존재하는지 알려주게 됩니다.
그래서 따로 1개만 전달받는 특수화된 템플릿 함수가 없이도 파라미터 팩 확장을 종료시킬 수 있습니다.
sizeof... 연산자를 활용해서 가변인자 템플릿을 좀 더 유연하게 사용할 수 있게 됩니다.
반응형