반응형
가변인자 템플릿의 지원으로 템플릿을 작성하는 것이 더 편리하게 되었습니다.
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... 연산자를 활용해서 가변인자 템플릿을 좀 더 유연하게 사용할 수 있게 됩니다.
반응형
'Programming > CPP11&14' 카테고리의 다른 글
[C++11] 새로워진 random number 생성 (0) | 2015.05.22 |
---|---|
[C++11] std::pair를 확장한 std::tuple (0) | 2015.05.17 |
[C++11] 가변인자 템플릿(Variadic Templates) (0) | 2015.03.05 |
[C++11] static_assert를 통한 컴파일 타임 검증 (0) | 2015.02.06 |
[C++11] default와 delete 키워드 (0) | 2015.01.08 |