템플릿의 부분 특화(Partial Template Specialization)란 그 템플릿이 구체화 가능한 인스턴스화 중 특정 부분 집합에 대응 시키는 것을 뜻한다. ..,, 말이 좀 어렵다. 아무리 생각해도 이 말은 좀 어렵다.
다시 해석 하자면, "만약 템플릿 파라미터가 A 라면, 이 템플릿 코드를 인스턴스화 해라" 라고 정하는게 템플릿 특화 이고, "만약 템플릿 파라미터들 중 첫번째가 A 라면, 이 템플릿 코드를 인스턴스화 해라" 이것이 템플릿 부분 특화 이다.
그럼 코드로 정리해 보자
이제 Widget 클래스 템플릿의 두번째 파라미터가 MyController 일 경우, 모든 코드는 부분 특수화 시킨 코드가 인스턴스화 되고, ModalDialog, MyController 일 경우, 특수화 시킨 코드가 인스턴스화 되고, 이도 저도 아닐 때는, Widget 클래스 템플릿의 일반 코드가 인스턴스화 된다.
이 기능에 대해서 저자는 다음과 같이 말했다. "이러한 특성은 프로그래머에게 놀라운 유연성을 가져다 줄 수 있습니다."
나는 이 저자의 평에 전적으로 동의한다. 코드의 인스턴스화를 제어 할 수 있다. 이는. 프로그래머에게 표현력을 더 넓힐 수 있다 는 것이 나의 생각이기 때문이다.
하지만 불행하게도, 클래스 템플릿의 멤버 함수는 전체 특화만 가능할 뿐, 부분 특화는 할 수 없다. 또한 함수 템플릿도 부분 특화를 할 수 없다. 이는 프로그래머의 표현력에 제한을 걸고 있다고 생각한다.
만약 클래스 템플릿의 멤버 함수, 함수 템플릿을 부분 특화 시켜야 한다면, 함수 오버로딩을 이용하여, 부분특화 처럼 사용 할 수 있다. (템플릿이 제공해 주는것이 아니기에 "처럼" 이라는 표현을 썻다.)
어쨋든 프로그래머에게 햄릿의 고뇌를 가져다 주는건 변함이 없겠지만, 이러한 방법들을 알아 두는게 좋을 것 같다.
여담, 아마도 이렇게 제한 적인 이유는, 컴파일러 제작자의 삶이 힘들었지 않았을까 한다. ㅋㅋ
'책 정리 > 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-4 상수 값에서 자료형으로의 변환 (0) | 2009.07.12 |
Part 2, 테크닉 : 2-3 로컬 클래스 (0) | 2009.06.28 |
Part 2, 테크닉 : 2-1 컴파일 타임 어써션 (0) | 2009.06.27 |
Part 1, 단위 전략(또는 정책 기반) 클래스(policy-based)의 디자인 (1067) | 2009.06.21 |
최근댓글