저녁을 jstrane과 함께 먹었는데, 먹다가 나온 얘기 중에 C++이 표준화된 이래 추가된 가장 큰 라이브러리 뭉치인 tr1 (technical report 1) 에 관한 내용이었다. 입사한 이래로 MS Windows + VS 환경에서만 개발을 하고 있었다. 최근에 VS 2008에 tr1의 베타 릴리즈가 추가되었고, 이런 추세로라면 곧 tr1은 "있다고 가정하고 쓸 수 있지 않겠느냐" 라고 생각했다. 그래서
rein: tr1이 추가되면 지금 빌드 트리에 올라간 boost 를 제거할 수 있겠네
jstrane: mpl은 tr1에 없어서 그건 유지해야할걸요?
…라고 하길래 와서 확인해보니 mpl은 없네 -_-;;
mpl은 meta programming library 에 해당하는 부분인데, 템플릿 메타 프로그래밍 라이브러리;template meta programming library(tmp)와 프리프로세서 메타 프로그래밍 라이브러리인 boost pp로 구성되어 있다. 그런데 이 부분이 tr1에 없더라. 사실 좀 매니악한(…) 부분이긴한데, mpl을 사용하면 템플릿을 프리프로세서 레벨에서 생성한다거나, 컴파일 시점에 특정 값을 계산하거나 하는 일을 수행할 수 있게된다.
간단히 가변인자 template을 손으로 일일이 작성하는게 아니라, 그걸 생성하는 프리프로세서 코드를 작성할 수도 있다. rein의 경우엔 지연된 함수호출 객체를 만들어내는 템플릿 + boost pp를 작성해서 사용했다.
그런데 tr1에는 정작 내가 사용하는 모든 boost library가 올라가있는게 아니니 -_-; 뭐 그래도 상대적으로 자주 쓰는 스마트 포인터나 튜플, 함수 객체 관련된 애들은 있으니 이런 것들은 얼마 후면 라이브러리 존재 여부를 덜 신경쓰고도 사용해도 되는 거겠지;
ps. 확인해보니 mpl이라고 할 수 있는 타입특성;type trait 라이브러리는 tr1에도 있더라.