2016-03-15 2 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> без каких-либо предварительных знаний о A и B? Можно ли отличать std::vector<A,B> от SomeOtherClass<A,B>?

Следующая не работает:

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

ответ

2

Вы могли бы обеспечить partial template specialization для std::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

Смежные вопросы