Частичная специализация с большим количеством параметров шаблона - PullRequest
0 голосов
/ 13 декабря 2018

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

Я читаю шаблоны C ++ (2-е издание) и что это упоминается в разделе 5.4 (Страница72), что

template <typename T, std::size_t SZ>
struct MyClass<T[SZ]>{
    static void print(){}
};

и

template <typename T, std::size_t SZ>
struct MyClass<T (&)[SZ]>{
    static void print(){}
};

являются частичными специализациями основного шаблона

template <typename T>
struct MyClass;

Прилагаемый код работает нормально.Но правильно ли это?Может ли частичная специализация иметь больше параметров шаблона, чем основной шаблон?

Редактировать - Этот вопрос был помечен как дубликат другого вопроса, но ответы на него здесь не имеют отношения к данному вопросу.Вопрос здесь в отношении количества параметров шаблона и комментариев, а также быстрое перечитывание стандарта прояснили для меня ответ.

1 Ответ

0 голосов
/ 13 декабря 2018

Да, частичная специализация действительно может иметь больше параметров шаблона, чем основной шаблон.Типичным примером этого использования является std::function:

template <class T>
struct function;

template <class R, class... A>
struct function<R (A...)>
{
  // std::function as we know it
};
...