auto как параметр шаблона
Ключевое слово auto можно использовать в качестве
типа нетипового параметра шаблона. Это означает, что
компилятор сам выведет тип такого параметра из
переданного аргумента. В первом параметре мы указываем
ключевое слово auto, а во втором - имя параметра,
который будет принимать значение. Такой подход удобен,
когда тип значения не важен для логики шаблона или
когда его сложно указать явно.
Синтаксис
template <auto name>
// тело шаблона
Также auto можно комбинировать с другими
параметрами шаблона, например с параметром типа:
template <typename T, auto N>
// тело шаблона
Пример
Давайте напишем шаблонную функцию, которая принимает
нетиповой параметр auto и выводит его значение:
#include <iostream>
using namespace std;
template <auto value>
void printValue()
{
cout << value << endl;
}
int main()
{
printValue<42>();
printValue<3.14>();
printValue<'a'>();
return 0;
}
Результат выполнения кода:
42
3.14
"a"
Пример
Давайте используем auto вместе с параметром типа,
чтобы создать шаблонный класс для хранения массива
фиксированного размера:
#include <iostream>
using namespace std;
template <typename T, auto N>
class Array
{
public:
T data[N];
auto size() const
{
return N;
}
};
int main()
{
Array<int, 5> arr;
cout << arr.size() << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте напишем шаблонную функцию, которая принимает
нетиповой параметр auto и возвращает его
удвоенное значение:
#include <iostream>
using namespace std;
template <auto value>
auto doubleValue()
{
return value * 2;
}
int main()
{
cout << doubleValue<21>() << endl;
cout << doubleValue<1.5>() << endl;
return 0;
}
Результат выполнения кода:
42
3
Смотрите также
-
ключевое слово
template,
которое объявляет шаблон -
ключевое слово
typename,
которое объявляет параметр типа шаблона -
шаблонный класс
template-class,
который позволяет создавать обобщенные классы -
конструкция
if constexpr,
которая выполняет ветвление на этапе компиляции