Универсальные алгоритмы
Шаблоны функций позволяют создавать универсальные алгоритмы, которые могут работать с любыми типами данных, поддерживающими необходимые операции.
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
std::cout << add(3, 4) << std::endl; // Вывод: 7
std::cout << add(3.5, 4.5) << std::endl; // Вывод: 8.0
return 0;
}
Обобщенные функции сравнения
Шаблоны функций позволяют создавать обобщенные функции для сравнения значений разных типов.
template <typename T>
bool equals(T a, T b) {
return a == b;
}
int main() {
std::cout << std::boolalpha;
std::cout << equals(3, 3) << std::endl; // Вывод: true
std::cout << equals(3.5, 3.5) << std::endl; // Вывод: true
std::cout << equals(3, 4) << std::endl; // Вывод: false
std::cout << equals('a', 'a') << std::endl; // Вывод: true
return 0;
}
Шаблонные функции для работы с контейнерами
Шаблоны функций позволяют создавать универсальные функции для работы с различными контейнерами.
#include <vector>
#include <list>
#include <iostream>
template <typename Container>
void printContainer(const Container& container) {
for (const auto& element : container) {
std::cout << element << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::list<std::string> lst = {"hello", "world"};
printContainer(vec); // Вывод: 1 2 3 4 5
printContainer(lst); // Вывод: hello world
return 0;
}
Шаблоны функций для математических операций
Шаблоны функций позволяют создавать универсальные математические операции, которые могут работать с разными числовыми типами.
template <typename T>
T multiply(T a, T b) {
return a * b;
}
int main() {
std::cout << multiply(3, 4) << std::endl; // Вывод: 12
std::cout << multiply(3.5, 4.5) << std::endl; // Вывод: 15.75
return 0;
}
Сортировка с использованием компараторов
Шаблоны функций позволяют создавать обобщенные функции сортировки с использованием различных компараторов.
#include <vector>
#include <algorithm>
#include <iostream>
template <typename T, typename Compare>
void sort(std::vector<T>& vec, Compare comp) {
std::sort(vec.begin(), vec.end(), comp);
}
int main() {
std::vector<int> vec = {4, 2, 5, 1, 3};
sort(vec, std::greater<int>()); // Сортировка по убыванию
for (int i : vec) {
std::cout << i << " "; // Вывод: 5 4 3 2 1
}
return 0;
}
Специализация шаблонов функций
Шаблоны функций позволяют создавать специализированные версии для определённых типов данных.
#include <iostream>
// Основной шаблон функции
template <typename T>
void printType(T value) {
std::cout << "Тип данных: " << typeid(T).name() << ", значение: " << value << std::endl;
}
// Специализация для типа int
template <>
void printType(int value) {
std::cout << "Это целое число, значение: " << value << std::endl;
}
int main() {
printType(10); // Вывод: Это целое число, значение: 10
printType(3.14); // Вывод: Тип данных: double, значение: 3.14
printType("Hello"); // Вывод: Тип данных: PKc, значение: Hello
return 0;
}
Использование с decltype
и auto
Шаблоны функций могут работать с decltype
и auto
для автоматического определения типа возвращаемого значения.
#include <iostream>
template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {
return a + b;
}
int main() {
std::cout << add(3, 4.5) << std::endl; // Вывод: 7.5
return 0;
}