Шаблон переменной
Шаблон переменной в C++ позволяет определить
переменную или статический член класса
с параметризованным типом. При этом
в первом параметре указывается
ключевое слово template с описанием
шаблонных параметров, а далее идёт
объявление переменной с типом, зависящим
от этих параметров. При обращении
к такой переменной тип подставляется
автоматически на основе явного указания
или вывода из контекста.
Шаблоны переменных часто применяются для создания обобщённых констант, например математических или физических величин, а также для определения статических членов шаблонных классов.
Синтаксис
template <typename T>
T variableName = value;
// или с несколькими параметрами:
template <typename T, typename U>
T variableName = value;
Пример
Давайте определим шаблон переменной
pi, которая хранит значение числа
пи для типа T:
#include <iostream>
using namespace std;
template <typename T>
constexpr T pi = T(3.1415926535897932385);
int main()
{
cout << pi<float> << endl;
cout << pi<double> << endl;
return 0;
}
Результат выполнения кода:
3.14159
3.14159
Пример
Давайте определим шаблон переменной, которая возвращает максимальное значение для заданного целочисленного типа:
#include <iostream>
#include <limits>
using namespace std;
template <typename T>
constexpr T maxValue = numeric_limits<T>::max();
int main()
{
cout << maxValue<int> << endl;
cout << maxValue<short> << endl;
return 0;
}
Результат выполнения кода:
2147483647
32767
Пример
Давайте определим шаблон переменной с двумя параметрами, которая хранит пару значений:
#include <iostream>
using namespace std;
template <typename T, typename U>
struct Pair
{
T first;
U second;
};
template <typename T, typename U>
constexpr Pair<T, U> pairValue{1, 2};
int main()
{
cout << pairValue<int, int>.first << " "
<< pairValue<int, int>.second << endl;
return 0;
}
Результат выполнения кода:
1 2
Смотрите также
-
ключевое слово
template,
которое объявляет шаблон -
ключевое слово
typename,
которое задаёт шаблонный параметр-тип -
шаблон класса
template class,
который параметризует класс -
псевдоним шаблона
alias template,
который создаёт псевдоним шаблона