일지

Effective C++...46

niamdank 2022. 8. 24. 07:43

템플릿 메타 프로그래밍, 하지 않겠는가?

TMP의 장점

TMP에는 크게 두 가지 장점이 존재한다.

  • 까다롭거나 불가능한 일을 쉽게 처리할 수 있다.
  • 기존 작업을 런타임 영역에서 컴파일 영역으로 전환할 수 있다.
    • 실행 도중에 잡혀 오던 에러를 컴파일 도중에 찾을 수 있다.
    • 효율적일 여지가 많다.
      • 실행코드가 작아진다.
      • 실행 시간이 짧아진다.
      • 메모리도 적게 잡아먹는다.

 

TMP의 반복 처리

TMP는 루프가 존재하지 않기 때문에 재귀를 이용해 반복 처리를 하게 된다.


template<unsigned n>

struct Factorial {

    // 이 경우 재귀를 통해 구현이 되며 모든 계산이 컴파일 타임에 이루어진다.

    enum { value = n * Factorial<n - 1>::value };

};

template<>

struct Factorial<0> {

    enum { value = 1 };

};


 

TMP가 강점을 가지는 영역

TMP는 여러 부분에서 사용되지만 다음의 영역에서는 확실한 강점을 가진다.

  • 치수 단위의 정확성 확인 정확한 치수를 맞춰야 하는 물리 등의 계산에서 컴파일 타임에 이러한 치수를 확인할 수 있다.
  • 행렬 연산의 최적화 덩치 큰 임시 객체를 없애는 것은 물론 루프까지 합칠 수 있다.
  • 맞춤식 디자인 패턴 구현의 생성 스마트 포인터 같이 설계상의 정책을 만들고 이것을 통해 필요한 인스턴스를 구현할 수 있다.