Кратко
Шаблон функции — это способ обобщения функции, чтобы она могла работать с любыми типами данных. Ключевое слово
template
используется для объявления шаблона.
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
В данном примере T
— это параметр типа, который будет заменен конкретным типом данных при вызове функции.
Пример шаблона функции
#include <iostream>
// Определение шаблона функции для поиска максимума
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
int intResult = max(3, 7); // Использование шаблона функции с типом int
double doubleResult = max(3.5, 2.1); // Использование шаблона функции с типом double
std::string strResult = max(std::string("apple"), std::string("banana")); // С типом std::string
std::cout << "Max of 3 and 7: " << intResult << std::endl;
std::cout << "Max of 3.5 and 2.1: " << doubleResult << std::endl;
std::cout << "Max of 'apple' and 'banana': " << strResult << std::endl;
return 0;
}
Выход программы
Max of 3 and 7: 7
Max of 3.5 and 2.1: 3.5
Max of 'apple' and 'banana': banana
Особенности и советы
- Несколько параметров типа: Шаблоны функций могут иметь несколько параметров типа.
template <typename T1, typename T2>
void printPair(T1 a, T2 b) {
std::cout << "(" << a << ", " << b << ")" << std::endl;
}
- Необходимость явного указания типа: В некоторых случаях компилятор не может вывести тип автоматически, тогда типы необходимо указывать явно.
std::cout << max<int>(10, 20) << std::endl;
- Специализация шаблонов: Можно определить специализацию шаблона функции для конкретного типа.
template <>
std::string max<std::string>(std::string a, std::string b) {
return (a.length() > b.length()) ? a : b;
}
Практическое применение
Шаблоны функций широко используются в библиотеках, таких как Standard Template Library (STL), где они позволяют создавать универсальные и переиспользуемые компоненты, такие как контейнеры и алгоритмы.