[Modern C++] 9.3. 템플릿 메타 프로그래밍

윤정민·2023년 7월 7일
0

C++

목록 보기
24/46
  • 일반화 프로그래밍: 템플릿을 통해서 타입이 마치 인자 인것 처럼 사용하는 것

1. 템플릿 메타 프로그래밍(TMP)

템플릿을 사용하면 객체를 생성하지 않더라도, 타입에 어떠한 값을 부여할 수 있고, 그 타입들을 가지고 연산할 수 있다. 또한 타입은 반드시 커마일 타임에 확정되어야하니 컴파일 타임에 모든 연산이 끝나게 된다. 이렇게 타입을 가지고 컴파일 타임에 생성되는 코드로 프로그래밍을 하는 것을 메타 프로그래밍이라고 한다. C++의 경우 템플릿을 가지고 이러한 작업을 하기 때문에 템플릿 메타 프로그래밍(TMP)이라 한다.

  • 컴파일 타임에 팩토리얼을 계산하는 코드
#include <iostream>
template <int N>
struct Factorial {
  static const int result = N * Factorial<N - 1>::result;
};

template <>
struct Factorial<1> {
  static const int result = 1;
};

int main() {
  std::cout << "6! = 1*2*3*4*5*6 = " << Factorial<6>::result << std::endl;
}

2. TMP를 쓰는 이유

  • 컴파일 타임에 모든 연산이 끝나기 때문에 프로그램 실행 속도를 향상시킬 수 있음(대신 컴파일 시간은 늘어남)

  • 하지만 TMP는 복잡하고 버그를 찾는게 힘드니 속도가 매우 중요한 기능에 사용하자

profile
그냥 하자

0개의 댓글