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 подскажет развёрнутый ответ в реальном времени.