2009.06.27 18:34 책 정리/Modern C++ Design

템플릿의 부분 특화(Partial Template Specialization)란 그 템플릿이 구체화 가능한 인스턴스화 중 특정 부분 집합에 대응 시키는 것을 뜻한다. ..,, 말이 좀 어렵다. 아무리 생각해도 이 말은 좀 어렵다.

다시 해석 하자면, "만약 템플릿 파라미터가 A 라면, 이 템플릿  코드를 인스턴스화 해라" 라고 정하는게 템플릿 특화 이고, "만약 템플릿 파라미터들 중 첫번째가 A 라면, 이 템플릿 코드를 인스턴스화 해라" 이것이 템플릿 부분 특화 이다.

그럼 코드로 정리해 보자

이제 Widget 클래스 템플릿의 두번째 파라미터가 MyController 일 경우, 모든 코드는 부분 특수화 시킨 코드가 인스턴스화 되고, ModalDialog, MyController 일 경우, 특수화 시킨 코드가 인스턴스화 되고, 이도 저도 아닐 때는, Widget 클래스 템플릿의 일반 코드가 인스턴스화 된다.

이 기능에 대해서 저자는 다음과 같이 말했다. "이러한 특성은 프로그래머에게 놀라운 유연성을 가져다 줄 수 있습니다."

나는 이 저자의 평에 전적으로 동의한다. 코드의 인스턴스화를 제어 할 수 있다. 이는. 프로그래머에게 표현력을 더 넓힐 수 있다 는 것이 나의 생각이기 때문이다.

하지만 불행하게도, 클래스 템플릿의 멤버 함수는 전체 특화만 가능할 뿐, 부분 특화는 할 수 없다. 또한 함수 템플릿도 부분 특화를 할 수 없다. 이는 프로그래머의 표현력에 제한을 걸고 있다고 생각한다.

만약 클래스 템플릿의 멤버 함수, 함수 템플릿을 부분 특화 시켜야 한다면, 함수 오버로딩을 이용하여, 부분특화 처럼 사용 할 수 있다. (템플릿이 제공해 주는것이 아니기에 "처럼" 이라는 표현을 썻다.)

어쨋든 프로그래머에게 햄릿의 고뇌를 가져다 주는건 변함이 없겠지만, 이러한 방법들을 알아 두는게 좋을 것 같다.

여담, 아마도 이렇게 제한 적인 이유는, 컴파일러 제작자의 삶이 힘들었지 않았을까 한다. ㅋㅋ



저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요