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

Ключевое слово concept

Ключевое слово concept используется для объявления именованного требования к параметрам шаблона. Концепт описывает, какими свойствами должен обладать тип, чтобы его можно было подставить в шаблон. В теле концепта указывается логическое выражение, которое проверяется компилятором во время подстановки параметров. Концепт можно применять к переменным, функциям, классам и псевдонимам шаблонов. Ограничение задается после имени шаблона через ключевое слово requires или непосредственно в списке параметров шаблона.

Синтаксис

template <typename T> concept ConceptName = requires(T x) { // требования к типу T };

Пример

Давайте объявим концепт Integral, который требует, чтобы тип был целочисленным, и применим его к шаблонной функции:

#include <iostream> #include <type_traits> using namespace std; template <typename T> concept Integral = is_integral_v<T>; template <Integral T> T add(T a, T b) { return a + b; } int main() { cout << add(1, 2) << endl; return 0; }

Результат выполнения кода:

3

Пример

Давайте объявим концепт Addable с помощью выражения requires, которое проверяет, что для типа определена операция сложения:

#include <iostream> using namespace std; template <typename T> concept Addable = requires(T a, T b) { a + b; }; template <Addable T> T sum(T a, T b) { return a + b; } int main() { cout << sum(1, 2) << endl; return 0; }

Результат выполнения кода:

3

Пример

Давайте объединим несколько требований в один концепт Numeric с помощью логических операторов &&:

#include <iostream> #include <type_traits> using namespace std; template <typename T> concept Numeric = is_integral_v<T> || is_floating_point_v<T>; template <Numeric T> T twice(T x) { return x + x; } int main() { cout << twice(5) << endl; cout << twice(1.5) << endl; return 0; }

Результат выполнения кода:

10 3

Смотрите также

  • ключевое слово requires,
    которое задает ограничение для шаблона
  • выражение requires,
    которое проверяет корректность выражений
  • ключевое слово constraint,
    которое задает ограничение шаблона
  • шаблон enable_if,
    который включает шаблон по условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить