Шаблонная функция (template function) - это функция, которая может работать с разными типами данных без необходимости переписывать код для каждого типа. Шаблоны позволяют реализовать обобщенное программирование.
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
В этом примере:
template <typename T>
- объявление шаблона с параметром типа TT
- это параметр-тип, который будет заменен на конкретный тип при использовании функции>
int main() {
std::cout << max<int>(3, 7); // 7
std::cout << max<double>(3.2, 7.5); // 7.5
std::cout << max<char>('a', 'z'); // 'z'
}
Шаблонный класс (template class) - это класс, который может работать с разными типами данных. Позволяет создавать обобщенные структуры данных.
template <typename T>
class Stack {
private:
std::vector<T> elements;
public:
void push(T const& elem) {
elements.push_back(elem);
}
T pop() {
if (elements.empty()) {
throw std::out_of_range("Stack<>::pop(): empty stack");
}
T elem = elements.back();
elements.pop_back();
return elem;
}
};
В этом примере:
template <typename T>
объявляет шаблон классаT
используется везде, где нужен параметризованный типint main() {
Stack<int> intStack; // стек для int
Stack<std::string> strStack; // стек для строк
intStack.push(42);
strStack.push("template");
}
Параметры шаблонов:
Инстанцирование:
Специализация:
Резюмируем: шаблоны в C++ - мощный механизм для создания обобщенного кода, позволяющий писать гибкие и эффективные программы без потери производительности и типобезопасности.