Hardpartial-specialization
Чем partial specialization function template запрещён?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Function templates нельзя частично специализировать (только fully) — это усложнило бы правила перегрузки. Вместо неё используют перегрузку или делегирование в class template.
// Перегрузка — выбирается более специализированная
template<typename T> void f(T) { /* общий случай */ }
template<typename T> void f(T*) { /* для указателей */ }
// Эмуляция partial spec через class template
template<typename T>
struct Helper { static void run(T) { /* общий */ } };
template<typename T>
struct Helper<T*> { static void run(T*) { /* для указателей */ } };
template<typename T>
void f(T x) { Helper<T>::run(x); } // делегированиеАльтернативы: std::enable_if/SFINAE, concepts (C++20), tag dispatch.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.