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

Требуемое выражение requires

Требуемое выражение requires используется для задания ограничений на параметры шаблона. Оно проверяет, удовлетворяет ли тип или выражение определенным требованиям, и возвращает true или false. Требуемое выражение можно использовать как самостоятельное логическое выражение, так и в составе концептов и ограничений шаблонов. Внутри requires перечисляются требования, которые должны выполняться для заданных типов или выражений.

Синтаксис

requires (параметры) { требования }

Простейшая форма требует только список требований:

requires { требования }

Пример

Давайте проверим, поддерживает ли тип int операцию сложения. Для этого используем требуемое выражение requires:

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

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

5

Пример

Давайте проверим, есть ли у типа метод size. Если метод отсутствует, шаблонная функция не будет участвовать в разрешении перегрузки:

#include <iostream> #include <string> #include <vector> using namespace std; template<typename T> requires requires(T t) { t.size(); } void printSize(const T& t) { cout << t.size() << endl; } int main() { string str = "abcde"; vector<int> vec = {1, 2, 3}; printSize(str); printSize(vec); return 0; }

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

5 3

Пример

Давайте используем requires внутри концепта, чтобы описать требование к типу более подробно:

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

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

5

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

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