-
Effective C++...46일지 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는 여러 부분에서 사용되지만 다음의 영역에서는 확실한 강점을 가진다.
- 치수 단위의 정확성 확인 정확한 치수를 맞춰야 하는 물리 등의 계산에서 컴파일 타임에 이러한 치수를 확인할 수 있다.
- 행렬 연산의 최적화 덩치 큰 임시 객체를 없애는 것은 물론 루프까지 합칠 수 있다.
- 맞춤식 디자인 패턴 구현의 생성 스마트 포인터 같이 설계상의 정책을 만들고 이것을 통해 필요한 인스턴스를 구현할 수 있다.