Кратко

Шаблон функции — это способ обобщения функции, чтобы она могла работать с любыми типами данных. Ключевое слово 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), где они позволяют создавать универсальные и переиспользуемые компоненты, такие как контейнеры и алгоритмы.