общая специализация класса для шаблона - PullRequest
3 голосов
/ 14 января 2011

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

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

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

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

Как можно это сделать?

Ответы [ 2 ]

8 голосов
/ 14 января 2011

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

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

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

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

1 голос
/ 14 января 2011
template < typename N >
struct Widget< template_thing<N> >
{
  ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...