2013-05-27 2 views
3

나는 기본적으로 내 인 TClass이 같은 여러 개의 템플릿 매개 변수가있는 것을 제외하고 Template specialization of a single method from a templated class에서 논의 무슨 할 노력하고있어 매개 변수 ,하지만 어떻게 하나의 템플릿 매개 변수에 대한 특수화 된 구현을 정의합니까?템플릿 전문화

template < class TYPE > 
void TClass<int, TYPE>::doSomething(int * v) 
{ 
    // do something if KEY is int 
} 

을하지만 컴파일러는 방법/기능 (VC2010) "기존 선언에 함수 정의와 일치 할 수없는"에 대해 불평 :이 추가 시도. (!) 참고로

:

template < > 
void TClass<int, char>::doSomething(int * v) 
{ 
    // do something if KEY is int and TYPE is char 
} 

을하지만 그건 내가 원하는 게 아니에요 : 나는 동시에 두 템플릿 매개 변수를 전문으로하면 작동합니다.

제안 사항?

+0

, BTW VS2015에서 오류 메시지가 격렬하게 인정 될 수 있습니다. C3860 : 잘못된 템플릿 매개 변수 순서 및 C2995 : 이미 정의 된 템플릿. –

답변

6

당신은 당신이 부분 특수화를 통해 방법을 정의하기 전에 전체 클래스를 전문으로 할 수 있습니다

template <typename T, typename U> 
class TClass; 

template <typename T> 
class TClass<int, T> 
{ 
    void doSomething(int* v); 
}; 

template <typename T> 
void TClass<int, T>::doSomething(int* v) 
{ 
    // ... 
} 

Live demo

1

클래스 방법을 완전히 전문화 할 수는 있지만 부분적으로 특수화 할 수는 없다는 것을 기억하십시오.

전체 클래스에 대해 부분 전문화를 시도 할 수는 있지만 대부분 중복 될 수 있습니다.

+0

귀하의 답변은 모두 baasically 동일합니다. 더 정교하기 때문에 0x499602D2의 답변을 표시했습니다. – marc40000