0

안녕하세요 저는 즉, 템플릿되는 클래스의 하위 그룹에 대해 정의하고자하는 템플릿 클래스의 정적 멤버있어 :템플릿 전문화를위한 템플릿 매개 변수?

template <typename T> 
class FooT 
{ 
private: 
static int ms_id; 
}; 

template <typename T> 
class Foo {}; 

template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10; 

는 슬프게도이 gcc가 아래에 다음과 같은 오류가 발생을 4.1.1

D : \ X \ Foo.h (98) : 오류 : template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10;

내가 잘못 뭐하는 거지 일반적인 개념은 처음에 허용 : 템플릿 인수 1 라인에

무효?

답변

3

:

template <typename T> 
class FooT 
{ 
private: 
static int ms_id; 
}; 

template <typename T> 
class Foo {}; 

template <typename T> 
class GetValue { 
    static const int v = 0; 
}; 

template <typename T> 
class GetValue< Foo<T> > { 
    static const int v = 10; 
}; 

template<typename T> int FooT<T>::ms_id = GetValue<T>::v; 
2

확실하게 템플릿 인스턴스에 템플릿 클래스를 추가 할 수 없습니다. "구체적인"수업을해야합니다. INT와 예를 들어

:

template <> 
int FooT< template Foo<int> >::ms_id = 10; 

또는

template<> 
int FooT<MyClass>::ms_id = 10; 
당신은 부분적으로 "초기화 템플릿"을 전문으로하여이 작업을 수행 할 수 있습니다
+0

예 작동 하지만 나는 모든 타입 o에 대해이 코드를 복제해야한다. foo. 이것은 확실히 컴파일러가 템플릿을 통해 자동화 할 수있는 많은 코드가 될 것입니다 ... – user176168

1
template <typename T> class Foo{}; 

struct MS_ID_TEN 
{ 
protected: 
    static int ms_id; 
} 
int MS_ID_TEN::ms_id = 10; 

template <typename T> struct MS_ID {} 
template <typename T> struct MS_ID< Foo<T> > : MS_ID_TEN {}; 

template <typename T> 
class FooT : public MS_ID<T> 
{ 
};