Шаблоны в С++
НАВИГАЦИЯ ПО СТРАНИЦЕ
Шаблоны в C++ — это мощный механизм, который позволяет создавать обобщенные (универсальные) функции и классы. Они позволяют писать код, который может работать с разными типами данных без необходимости создания отдельных версий для каждого типа. Вот основные принципы использования шаблонов в C++:
Шаблоны функций :
#include <iostream>
// Шаблон функции для обмена значениями между двумя переменными
template <typename T>
void swapValues(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
double a = 3.14, b = 6.28;
// Использование шаблонной функции
swapValues(x, y);
swapValues(a, b);
std::cout << "x: " << x << ", y: " << y << "\n";
std::cout << "a: " << a << ", b: " << b << "\n";
return 0;
}
Шаблоны классов :
#include <iostream>
// Пример шаблона класса "Pair" для представления пары значений любого типа
template <typename T1, typename T2>
class Pair {
public:
T1 first;
T2 second;
Pair(const T1& a, const T2& b) : first(a), second(b) {}
};
int main() {
// Использование шаблонного класса
Pair<int, double> myPair(5, 3.14);
std::cout << "Pair values: " << myPair.first << " and " << myPair.second << "\n";
return 0;
}
Шаблоны функций с несколькими параметрами:
#include <iostream>
// Шаблон функции с несколькими параметрами
template <typename T, int N>
T multiplyByConstant(T value) {
return value * N;
}
int main() {
int result = multiplyByConstant<int, 5>(10);
std::cout << "Result: " << result << "\n";
return 0;
}
Особенности использования шаблонов:
Неявная специализация: Компилятор может автоматически выбирать типы для шаблонов функций и классов на основе переданных аргументов.
Явная специализация: Разработчик может явно указывать конкретные типы для шаблонов в случаях, когда требуется управление специфичным поведением.
Несколько параметров: Шаблоны могут иметь несколько параметров, включая типы, целочисленные значения и указатели на функции.
Ограничения (Constraints): С++20 предоставляет механизмы для добавления ограничений на типы, передаваемые в шаблоны.
Шаблоны-члены: Шаблоны могут быть использованы внутри классов для создания шаблонных членов класса.
Использование шаблонов в C++ существенно расширяет возможности создания универсального кода и повышает гибкость программирования.