C++ tr1에는 MPL이 없다
저녁을 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을 손으로 일일이 작성하는게 아니라, 그걸 생성하는 프리프로세서 코드를 작성할 수도 있다. 이전에 지연된 함수호출 객체를 만들어내는 템플릿 + boost pp를 작성해서 사용했다.
그런데 tr1에는 정작 내가 사용하는 모든 boost library가 올라가있는게 아니니, 그래도 상대적으로 자주 쓰는 스마트 포인터나 튜플, 함수 객체 관련된 애들은 있으니 이런 것들은 얼마 후면 라이브러리 존재 여부를 덜 신경쓰고도 사용해도 되는 거겠지;
ps. 확인해보니 mpl 중 일부라고 할 수 있는 타입특성;type trait 라이브러리는 tr1에도 있더라.