템플릿 메타프로그래밍

템플릿 메타프로그래밍 (Template metaprogramming)

컴파일 타임에 새로운 타입을 만들고 값을 계산하는 기법들의 모음을 **템플릿 메타프로그래밍(template metaprogramming)**이라고 불러요. C++ 템플릿은 재귀적 인스턴스화의 양이나 허용되는 상태 변수의 수에 제한이 없으면 튜링 완전(Turing complete)해요. 에르빈 운루(Erwin Unruh)는 위원회 회의에서 컴파일러가 오류 메시지로 소수를 출력하게 만들어 템플릿 메타프로그래밍을 처음으로 시연했어요. 표준은 구현이 최소 1024단계의 재귀적 인스턴스화를 지원하도록 권장하며, 템플릿 인스턴스화에서의 무한 재귀는 정의되지 않은 동작(undefined behavior)이에요.

출처: cppreference

본문

이 페이지는 아직 다듬어지지 않았어요. 다음 주제들이 채워질 예정이에요.

  • 기법(Techniques): 특수화(specializations), SFINAE, ADL, 인덱스 시퀀스(index sequences), 폴드(folds, C++17), constexpr if 등
  • 용어(Terms): traits, typelists, metafunctions 등
  • 라이브러리(Libraries): Boost.MPL / Boost.Mp11 / Metal / Kvasir.MPL / Boost.Hana 등(어쩌면 옛날의 Loki까지)
  • 역사(History): 메타프로그래밍의 발전 과정

더 알아보기

  • 템플릿: C++에서 타입·함수의 가족을 정의하는 핵심 기법. 메타프로그래밍의 기반이에요.
  • 템플릿 매개변수와 인자: 템플릿을 매개변수화하는 방법.
  • 템플릿 특수화: 특정 타입 집합에 대해 템플릿 코드를 맞춤 수정하는 방법.