Namespaces
Variants

C++ named requirements: Predicate

From cppreference.net
C++ named requirements

Требования Predicate описывают вызываемый объект, возвращающий BooleanTestable значение.

Предикат обычно используется с алгоритмами, которые принимают входные данные (отдельные объекты/контейнеры) и предикат, который затем вызывается на входных данных для определения дальнейшего курса действий. Некоторые примеры использования предикатов в стандартной библиотеке C++:

  • std::all_of , std::any_of , std::none_of Принимают на вход массив элементов и предикат. Вызывают предикат для каждого отдельного входного элемента и возвращают true, если для всех/любого/ни одного из элементов предикат возвращает true.
  • std::find_if Принимает последовательность элементов и предикат. Возвращает первый элемент в последовательности, для которого предикат возвращает значение, равное true .

Приведённое выше описание алгоритмических средств является упрощённым и предназначено для объяснения Predicate в простых терминах. Для получения детальной информации обратитесь к соответствующим страницам.

Другими словами, если алгоритм принимает Predicate pred и итератор first , он должен иметь возможность проверять объект типа, на который указывает итератор first , используя заданный предикат с помощью конструкции вида if ( pred ( * first ) ) { /*...*/ } .

Функциональный объект pred не должен применять никакие неконстантные функции через разыменованный итератор и должен принимать const аргумент, с одинаковым поведением независимо от того, является ли аргумент const или не- const . Этот функциональный объект может быть указателем на функцию или объектом типа с подходящим оператором вызова функции.

Требования

Отчеты о дефектах

Следующие отчеты о дефектах, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3031 C++98 requirements on const values were insufficent requirements strengthened

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

(C++20)
определяет, что вызываемый тип является булевым предикатом
(концепт)