Ответ
Шаблон (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: Вся стандартная библиотека (векторы, списки, алгоритмы) построена на шаблонах.