Hardспециализация
Чем полная специализация отличается от частичной?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Полная специализация задаёт реализацию для конкретных всех параметров. Частичная — для подмножества (например, для всех указателей). Функции частичную специализацию не поддерживают — вместо неё перегрузка.
// Полная специализация класса
template<> class vector<bool> { /* bitmap */ };
// Частичная специализация — для указателей
template<class T> class vector<T*> { /* pointer-optimized */ };
// Функции — только полная, вместо частичной — перегрузка
template<class T> void f(T);
template<class T> void f(T*); // перегрузка, не специализация- Частичная полезна для type traits:
template<class T> struct is_pointer<T*> : true_type {};; - Полная — для полностью конкретных случаев (vector<bool> как bitmap).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.