Выбор ответа Middle Шаблоны и концепты обновлено

Частичная специализация функции

Вопрос

Можно ли частично специализировать шаблон функции, например template <class T> void f<T*>(T*)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: для функций вместо этого перегрузка. Шаблоны функций допускают только полную специализацию, а нужного эффекта добиваются перегрузкой: template <class T void f(T).

Варианты ответа

  1. Да, точно так же, как у шаблонов классов
  2. Да, но только для указателей и ссылок
  3. Нет: для функций вместо этого перегрузкаправильный ответ
  4. Да, начиная с C++20 вместе с концептами

Разбор

Шаблоны функций допускают только полную специализацию, а нужного эффекта добиваются перегрузкой: template <class T> void f(T*). Причём перегрузка надёжнее полной специализации, потому что специализации не участвуют в выборе перегрузки.

  • У классов частичная специализация есть.
  • Ограничения по указателям нет.
  • C++20 этого не менял, зато добавил концепты, которые часто заменяют такие трюки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.