One minute
🏃 Modern C++ - 2. Template Meta Programming
C++ 템플릿 메타 프로그래밍(TMP) 간단 정리
컴파일 타임에 생성되는 코드를 이용하여 프로그래밍하는 방법을 ‘메타 프로그래밍’이라 하는데, 템플릿이 컴파일 타임에 코드가 만들어지는 점을 이용하여 프로그래밍 하는 방법을 ‘템플릿 메타 프로그래밍(TMP)‘라 부른다.
런타임에 계산될 작업을 컴파일 타임에 해결할 수 있어 컴파일 타임은 길어지지만 실행 속도가 매우 좋아진다. 하지만 TMP는 복잡하고 구성하기 어려우며, 디버그가 어려워진다는 단점으로 인해 현업에서 자주 사용되지는 않는다.
보통 재귀적인 방법으로 구현하며, 컴파일러마다 재귀 가능 횟수가 어느정도 정해져 있어 재귀 횟수가 큰 경우에는 컴파일이 실패할 수도 있다. TMP를 편하게 구성하기 위하여 boost::MPL 라이브러리를 활용할 수 있다.
참고로 TMP는 튜링 완전성을 가져 모든 코드를 TMP로 구성할 수 있다.
현실에 존재하는 값들과 연관된 연산에서는 항상 ‘단위’에 주의해야 하는데, TMP 등을 이용하여 단위(Unit) 클래스를 제작하여 사용할 수도 있다.
divide<N, two>::result(N, two에 의존하는 ‘타입’)와 같은 ‘의존 타입’을 사용하기 위해서는 컴파일러에게 해당 키워드가 타입임을 확실히 알려주기 위해 앞에 typename 키워드를 붙여줘야 한다