2008. 12. 18. 15:51 책 정리/C++ Template

템플릿 특수화란?

 템플릿 매개변수에 따라 컴파일러가 템플릿 코드 선택해 줄수 있게 해주는 기법을 말한다. 템플릿 특수화는 여러가지 용도로 사용 되는데, 포인터 타입이 들어오거나, 특정 타입을 받았을 경우, 특수화된 템플릿이 인스턴스화 되게 할 수 있다. 굳이 비교를 하자면, C 언어의 if 문 같은 녀석이다. (메타 프로그래밍에선 이 특수화를 감칠맛 나게 응용한다.)


템플릿 특수화를 어떻게 만드나?

예제코드를 보자.

예제 코드에서 처럼 template <> 가 바로 "템플릿 특수화니까, 매개변수 안받는거야. 컴파일러 알지?" 라고 지정한 것 이고, ikpil<int> 가 바로 "int 에 대해서 특수화 시킨거야" 라고 컴파일러에게 말해 주는거와 같다. : )


문제점은 없나?

 특수화에 관련된 문제는 아니고, 템플릿의 전반적인 문제로, 코드 부풀림현상이란 것이 있다. 이 녀석은 템플릿의 매개변수가 변경됨에 따라, 템플릿 코드를 마구 찍어내어, 실행 파일의 크기를 높여 줌으로써, 캐쉬 적중률을 낮추게되고 이것 때문에 성능을 저하시킬 수 있다고 한다.

.. 어차피 사용 되면 인스턴스화 되는 부분이기 때문에, 크게 신경쓰지 않아도 된다. 만약 이것이 큰 문제라면, 상세 구현부를 캡슐화 하여, 코드 부풀림을 억제 할 수 있다.


총평

 졸리다..

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요