Что такое шаблон (template) в C++?

«Что такое шаблон (template) в C++?» — вопрос из категории Шаблоны, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Шаблон (template) в C++ — это механизм метапрограммирования, позволяющий писать обобщённый код, независимый от конкретных типов данных. Компилятор генерирует конкретные реализации (инстанциации) шаблона для тех типов, с которыми он используется.

1. Шаблон функции:

template <typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}
// Использование:
int i = max(10, 20);           // T = int
double d = max(3.14, 2.71);    // T = double
// std::string s = max(std::string("abc"), std::string("def")); // T = std::string

2. Шаблон класса:

template <typename T, size_t N = 100> // Параметр шаблона может быть не только типом
class Stack {
    T elements[N];
    size_t top{0};
public:
    void push(const T& value) { elements[top++] = value; }
    T pop() { return elements[--top]; }
};
// Использование:
Stack<int> intStack;          // Стек для int с размером по умолчанию 100
Stack<double, 500> doubleStack; // Стек для double размером 500

Преимущества:

  • Устранение дублирования кода: Один шаблон заменяет множество функций/классов для разных типов.
  • Безопасность типов: Проверка типов происходит во время компиляции.
  • Производительность: Отсутствие накладных расходов времени выполнения (в отличие от полиморфизма через виртуальные функции).
  • Основа STL: Вся стандартная библиотека (векторы, списки, алгоритмы) построена на шаблонах.