Шаблоны функций и классов в 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;
Поддержать проект