2016-03-15 102 views
1

我有一個模板類如何專門爲一個類的模板模板參數?

template <class T> 
struct TypeText { 
    static const char *text; 
}; 

和一些專業化的爲「文本」成員:

template <> const char* TypeText<int>::text = "INT"; 
template <> const char* TypeText<long>::text = "LONG"; 

如何貫徹std::vector<A,B>沒有先驗知識約AB專業化?是否有可能從SomeOtherClass<A,B>不同std::vector<A,B>

下不起作用:

template <> 
template <class T, class A> 
const char* TypeText< std::vector<T,A> >::text = "vector"; 

回答

2

你可以提供一個partial template specializationstd::vector

template <class T> 
struct TypeText<std::vector<T>> { 
    static const char *text; 
}; 
template <class T> 
const char* TypeText<std::vector<T>>::text = "vector"; 

然後使用它,例如:

...TypeText<std::vector<int>>::text... // "vector" 
...TypeText<std::vector<long>>::text... // "vector" 

LIVE

+0

您已更改初始模板類。 – pavelkolodin

+0

我錯了。這是部分專業化讓我感到驚訝。謝謝。 – pavelkolodin

+0

@pavelkolodin BTW:你爲什麼要指定'std :: vector'的第二個模板參數?如果你真的需要這樣做,你也可以爲局部特化添加第二個模板參數。 – songyuanyao