Ключевое слово template
Ключевое слово template позволяет создавать
шаблоны функций и классов, которые могут работать
с различными типами данных без дублирования кода.
В угловых скобках указывается список параметров
шаблона: обычно это типы, объявленные через
ключевое слово typename или class,
а также могут быть нетиповые параметры, например,
целочисленные значения. Компилятор автоматически
подставляет конкретный тип при вызове шаблонной
функции или создании объекта шаблонного класса.
Синтаксис
template <typename T>
T functionName(T param)
{
// тело функции
}
template <typename T>
class ClassName
{
// тело класса
};
Пример
Давайте создадим шаблонную функцию getMax,
которая возвращает наибольшее из двух значений:
#include <iostream>
using namespace std;
template <typename T>
T getMax(T a, T b)
{
if (a > b)
{
return a;
}
return b;
}
int main()
{
cout << getMax(3, 7) << endl;
cout << getMax(2.5, 1.5) << endl;
return 0;
}
Результат выполнения кода:
7
2.5
Пример
Давайте создадим шаблонный класс Box,
который хранит значение любого типа:
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Box
{
private:
T value;
public:
Box(T v) : value(v) {}
T getValue()
{
return value;
}
};
int main()
{
Box<int> intBox(42);
Box<string> strBox("abcde");
cout << intBox.getValue() << endl;
cout << strBox.getValue() << endl;
return 0;
}
Результат выполнения кода:
42
"abcde"
Пример
Давайте создадим шаблонную функцию с двумя параметрами разных типов, которая выводит их на экран:
#include <iostream>
#include <string>
using namespace std;
template <typename T1, typename T2>
void printPair(T1 a, T2 b)
{
cout << a << " " << b << endl;
}
int main()
{
printPair(1, "abcde");
printPair("12345", 2);
return 0;
}
Результат выполнения кода:
"1 abcde"
12345 2
Смотрите также
-
ключевое слово
typename,
которое объявляет параметр-тип в шаблоне -
шаблонный класс
template class,
который обобщает классы для разных типов -
специализация
specialization,
которая задает особое поведение шаблона для типа -
вариативный шаблон
variadic,
который принимает переменное число параметров