Шаблоны функций и классов в C++ (templates)
Шаблоны в C++ (templates) позволяют писать один код, работающий для любых типов.
Шаблон — это обобщённый код с типом-параметром. Компилятор подставляет конкретный тип при вызове и порождает нужную версию функции или класса.
Шаблон функции
template <typename T> делает функцию обобщённой: T заменяется реальным типом при вызове.
#include <iostream>
using namespace std;
template <typename T>
T maxOf(T a, T b) {
return a > b ? a : b;
}
int main() {
cout << maxOf(3, 7) << "\n"; // T = int
cout << maxOf(2.5, 1.5) << "\n"; // T = double
cout << maxOf('a', 'z') << "\n"; // T = char
return 0;
}Вывод:
7 2.5 z
Шаблон класса
Класс тоже может быть шаблонным — например, контейнер, хранящий значение любого типа.
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Box {
T value;
public:
Box(T v) : value(v) {}
T get() const { return value; }
};
int main() {
Box<int> bi(42);
Box<string> bs("привет");
cout << bi.get() << "\n";
cout << bs.get() << "\n";
return 0;
}Вывод:
42 привет
Коротко
- Шаблон объявляют через template <typename T> (или class T).
- Один шаблон функции работает для int, double, char и т.д.
- Шаблонный класс задаёт тип в угловых скобках: Box<int>, Box<string>.
Проверьте себя
1. Зачем нужны шаблоны?
AУскорить компиляцию
BПисать код, работающий для разных типов
CЗаменить функции
DУправлять памятью
2. Как объявить шаблонную функцию?
Ageneric <T>
Btemplate <typename T>
Cfunction<T>
Dtypedef T
3. Как создать Box для строк?
ABox bs;
BBox<string> bs("...");
CBox(string) bs;
Dstring Box bs;