3

позволяет сказать, у меня есть шаблонный классобщий класс специализации для шаблона

template <typename T> 
struct Widget 
{ 
    //generalized implementation 
} 

, но я хотел бы полностью специализироваться .. для шаблона, который принял параметр?

template <> 
struct Widget< TemplateThatAcceptsParameter<N> > 
{ 
     //implementation for Widget for TemplateThatAcceptsParameterN 
     //which takes parameter N 
} 

Как один идти об этом?

ответ

8

Это называется частичной специализации и может быть закодирована следующим образом:

template <typename T> 
struct Widget 
{ 
    //generalized implementation 
}; 

template <typename N> 
struct Widget< TemplateThatAcceptsParameter<N> > 
{ 
    //implementation for Widget for TemplateThatAcceptsParameterN 
    //which takes parameter N 
}; 

Он работает так же, как обычные специализации, но имеет дополнительный аргумент шаблона.

+0

+1. Важное предупреждение: только для 'struct' и' class', не относится к функциям (тогда это перегрузка). –

+0

+1, работает также для 'union' (которые также являются классами типа' struct' и 'class'). –

1
template < typename N > 
struct Widget< template_thing<N> > 
{ 
    ... 
}; 
Смежные вопросы