Выбор ответа Middle Шаблоны и концепты обновлено
Частичная специализация функции
Вопрос
Можно ли частично специализировать шаблон функции, например template <class T> void f<T*>(T*)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет: для функций вместо этого перегрузка. Шаблоны функций допускают только полную специализацию, а нужного эффекта добиваются перегрузкой: template <class T void f(T).
Варианты ответа
- Да, точно так же, как у шаблонов классов
- Да, но только для указателей и ссылок
- Нет: для функций вместо этого перегрузкаправильный ответ
- Да, начиная с C++20 вместе с концептами
Разбор
Шаблоны функций допускают только полную специализацию, а нужного эффекта добиваются перегрузкой: template <class T> void f(T*). Причём перегрузка надёжнее полной специализации, потому что специализации не участвуют в выборе перегрузки.
- У классов частичная специализация есть.
- Ограничения по указателям нет.
- C++20 этого не менял, зато добавил концепты, которые часто заменяют такие трюки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: sizeof..., fold и статический член шаблона
Следующий вопрос
requires-выражение
Ещё по теме «Шаблоны и концепты»
- Дерево отрезков с операцией как параметром шаблона
- Обобщённая функция статистики для чисел и строк
- Один бинарный поиск на все случаи: предикат как параметр шаблона
- Зачем концепты
- Концепты против SFINAE
- Вывод аргументов шаблона класса
- Вывод T при передаче по значению
- Член зависимой базы