C, C++

C++] 템플릿 메타 프로그래밍

slowcloud_ 2026. 3. 6. 21:31

템플릿으로 typename을 활용하여 제네릭처럼 활용하는 경우가 많지만, 일반적인 자료형을 활용하여 메타프로그래밍을 진행할 수 있다.

 

template <int n>
int factorial() {
    if constexpr(n <= 0) {
        return 0;
    }
    else if constexpr(n == 1) {
    	return 1;
    }
    else {
    	return factorial<n-1>() * n;
    }
}

위와 같이 단순히 상수를 넘겨받는 식으로 템플릿을 작성할 수 있으며, 재귀적으로 템플릿 함수를 호출하여 코드를 생성할 수 있다.

 

위는 코드를 컴파일했을 때 생성된 어셈블리 코드를 보여주는 사이트이다.

상단의 코드를 좌측과 같이 작성했을 때, 우측의 어셈블리 코드에서 10 이하에 대한 팩토리얼 코드가 작성되는 것을 확인할 수 있다.

 

템플릿을 활용하면 컴파일 타임에 연산을 수행하여 더 빠르게 작동하는 프로그램을 작성할 수 있다.

 

상단은 컴파일 최적화 옵션을 넣고 컴파일한 결과이다. 팩토리얼 연산을 사전에 완전히 끝내고 상수로 값이 적용된다.