이 기술은 내가 제일 아끼는 기술이다. 컴파일타임에 함수 오버로딩을 이용해 분기시키는 기술인데, 가끔식 쓸때마다 정말 재미있다.
이 기술은 다음과 같은 조건일 때 쓸 수 있다.
-
컴파일 타음에 주어진 상수에 따라 여러개의 함수 중 하나를 호출 해야 할 때
- 이러한 디스패칭 작업을 컴파일 타임에 결정 할 떄
Effective C++ 3판, 항목 47 : 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자. 에 자세히 나온다.
그래도 이번에 다시 한번 정리해 본다.
상수를 타입으로 만들려면 코드 유틸리티가 필요한데, 다음과 같이 만들자.
음 훌륭하다. 그런데 상수형 타입이 만들어 질 때마다 전역공간을 쓴다는 것에 큰 이질감을 느낀다. 이런 이질감은 무척 좋은 느낌이다. 왜냐하면 더 훌륭한 코드를 만드는 에너이이기 때문이다. 자! 이것을 더 특화 시키면 다음과 같이 만들 수 있다.
훌륭하다. 이제 이것을 활용해 보자고 맘먹고 눈을 부릅 뜨고 자신의 코드를 보면 쓸만한 곳이 두군대 쯤 있을 것이다. : )
책의 활용 부분에 몇자를 인용하면 이렇게 나와 있다. "사용하지 않는데 컴파일러가 자꾸 날 귀찮게 하니, 템플릿 특성을 이용해서 한방 먹여 줬지!". 곰곰히 생각해 보면 이건 컴파일 타임 분기를 해준다는 특징 말고도, 템플릿의 특징까지 갖고 있다.
그 활용 방법에 대해서 코드를 통해 알아보자.
만약 T가 Clone 함수를 가지고 있다면 우리는 int2type<true>로 해결할 수 있고, 없다면 false로 해결 할 수 있다. 함수 Clone이 없다 하더라도 false만 지정해 주면 컴파일 타임에 에러는 찾아볼 수 조차 없을 것이다. 신기하지 않는가? 물론 컴파일타임에 좀 시간을 먹는다는 것만 제외 한다면, 이건 정말 오렌지같이 뇌를 자극해 주는 것이다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
Part 2, 테크닉 : 2-10 Traits 자료형 (0) | 2009.07.30 |
---|---|
Part 2, 테크닉 : 2-9 NullType과 EmptyType (710) | 2009.07.28 |
Part 2, 테크닉 : 2-8 type_info에 대한 포장 클래스 만들기 (0) | 2009.07.24 |
Part 2, 테크닉 : 2-7 형변환과 상속 가능의 여부를 컴파일 타임에 일어 내는 방법 (0) | 2009.07.24 |
Part 2, 테크닉 : 2-6 자료형의 선택 테크닉 (0) | 2009.07.23 |
Part 2, 테크닉 : 2-5 타입을 다른 타입으로의 매핑하는 테크닉 (0) | 2009.07.23 |
Part 2, 테크닉 : 2-3 로컬 클래스 (0) | 2009.06.28 |
Part 2, 테크닉 : 2-2 템플릿의 부분 특화 (0) | 2009.06.27 |
Part 2, 테크닉 : 2-1 컴파일 타임 어써션 (0) | 2009.06.27 |
Part 1, 단위 전략(또는 정책 기반) 클래스(policy-based)의 디자인 (1067) | 2009.06.21 |
최근댓글