C++ именованные требования: Predicate
Требования Predicate описывают вызываемый объект, возвращающий значение, проверяемое как bool.
Predicate обычно используется с алгоритмами, которые принимают входные данные (отдельные объекты/контейнеры) и предикат, который затем вызывается на входных данных, чтобы принять решение о дальнейшем ходе действия. Некоторые примеры использования предиката в стандартной библиотеке 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++20). Этот объект-функция может быть указателем на функцию или объектом типа с соответствующим оператором вызова функции.
Требования
См. также
|
(C++20) | определяет, что тип вызываемого объекта является булевым предикатом (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/Predicate