РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
711 of 815 menu

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,
    которая выполняет ветвление на этапе компиляции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить