이 기술은 내가 제일 아끼는 기술이다. 컴파일타임에 함수 오버로딩을 이용해 분기시키는 기술인데, 가끔식 쓸때마다 정말 재미있다.

이 기술은 다음과 같은 조건일 때 쓸 수 있다.

  1. 컴파일 타음에 주어진 상수에 따라 여러개의 함수 중 하나를 호출 해야 할 때
  2. 이러한 디스패칭 작업을 컴파일 타임에 결정 할 떄


Effective C++ 3판, 항목 47 : 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자. 에 자세히 나온다.

그래도 이번에 다시 한번 정리해 본다.

상수를 타입으로 만들려면 코드 유틸리티가 필요한데, 다음과 같이 만들자.

음 훌륭하다. 그런데 상수형 타입이 만들어 질 때마다 전역공간을 쓴다는 것에 큰 이질감을 느낀다. 이런 이질감은 무척 좋은 느낌이다. 왜냐하면 더 훌륭한 코드를 만드는 에너이이기 때문이다. 자!  이것을 더 특화 시키면 다음과 같이 만들 수 있다.

 훌륭하다. 이제 이것을 활용해 보자고 맘먹고 눈을 부릅 뜨고 자신의 코드를 보면 쓸만한 곳이 두군대 쯤 있을 것이다. : )

책의 활용 부분에 몇자를 인용하면 이렇게 나와 있다. "사용하지 않는데 컴파일러가 자꾸 날 귀찮게 하니, 템플릿 특성을 이용해서 한방 먹여 줬지!". 곰곰히 생각해 보면 이건 컴파일 타임 분기를 해준다는 특징 말고도, 템플릿의 특징까지 갖고 있다.

그 활용 방법에 대해서 코드를 통해 알아보자.


만약 T가 Clone 함수를 가지고 있다면 우리는 int2type<true>로 해결할 수 있고, 없다면 false로 해결 할 수 있다. 함수 Clone이 없다 하더라도 false만 지정해 주면 컴파일 타임에 에러는 찾아볼 수 조차 없을 것이다.  신기하지 않는가? 물론 컴파일타임에 좀 시간을 먹는다는 것만 제외 한다면, 이건 정말 오렌지같이 뇌를 자극해 주는 것이다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기