멤버 템플릿을 특수화 할 때 주의점

C++ 프로그래밍을 하면서 멤버 템플릿을 특수화 했더니, 컴파일 오류가 발생했다. 동일한 코드가 비주얼 스튜디오에서는 정상적으로 컴파일이 되었기에 당황스러웠다. 왜 그런지 검색을 해 보니, 멤버 템플릿의 특수화는 클래스 정의 내부에 있으면 안된다는 게 이유였다. 그래서 간단한 예제 코드를 작성해서 테스트를 해 보기로 했다.

먼저 멤버 함수 템플릿을 다음과 같이 작성하고 특수화 했다.

멤버 함수 템플릿의 특수화 예제 코드 보기

그러자 컴파일러는 다음과 같은 오류를 뱉어내며 컴파일을 거부했다.

CPP4-1 멤버 함수 템플릿의 컴파일 오류 메시지

해결 방법은 간단하다. 멤버 함수 템플릿의 특수화 구문을 클래스 정의 밖으로 꺼내면 된다(위의 예제 코드에서는 첫 줄의 매크로 정의 주석을 풀어주면 된다).

클래스 내부에 선언된 클래스 템플릿을 특수화 할때에도 동일하다. 다만, 클래스 템플릿의 부분 특수화 구문은 클래스 정의 내부에 있어도 상관이 없다. 즉, 다음 예제 코드는 정상적으로 컴파일된다.

클래스 내부에 선언된, 클래스 템플릿의 특수화 예제 코드 보기

왜 이런 것일까? 다음 링크의 글을 읽어보면 알 수 있다.

http://kyeru.egloos.com/5778230




다른 글들의 목록을 보려면 이 이미지를 클릭해 주세요.