C++ named requirements: Predicate
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Требования 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)
|
определяет, что вызываемый тип является булевым предикатом
(концепт) |