C++에서는 템플릿에 어떠한 타입이 있는 값을 사용할 수 있고, 이를 통해서 컴파일 타임에 구성되는 어떠한 로직을 구성할 수 있다. 이런 방식의 프로그래밍을 템플릿 메타 프로그래밍이라고 한다.
template<int N>
struct Factorial {
static const int result = N * Factorial<N - 1>::result;
};
template<>
struct Factorial<1> {
static const int result = 1;
};
재귀 함수의 예시로 가장 많이 사용되는 팩토리얼을 활용해서 예시를 구성하였다.
템플릿 특수화를 활용해서 1이 되었을 경우 result값으로 1을 정의하고, Factorial<N>을 받았을 경우 지속적으로 result에 N * Factorial<N-1>::result 값을 대입하도록 정의하였다.
만약 Factorial<3>::result를 입력할 경우
Factorial<3>::result = 3 * Factorial<2>::result;
Factorial<2>::result = 2 * Factorial<1>::result;
Factorial<1>::result = 1;
3*2*1 = 6
이러한 연산이 컴파일 타임에 수행되어서 지정되게 된다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
STL 컨테이터 - Vector (0) | 2023.02.14 |
---|---|
C++ 문법 / Using 키워드 (0) | 2023.02.13 |
C++ 프로그래밍 방법론 / 함수 객체 Functor (0) | 2023.02.13 |
C++ 문법 / 템플릿 (0) | 2023.02.13 |
C++ 표준 라이브러리 / 파일입출력 (0) | 2023.02.13 |
댓글