std::experimental::ranges:: Invocable, std::experimental::ranges:: RegularInvocable
|
Определено в заголовочном файле
<experimental/ranges/concepts>
|
||
|
template
<
class
F,
class
...
Args
>
concept
bool
Invocable
=
|
(ranges TS) | |
|
template
<
class
F,
class
...
Args
>
concept bool RegularInvocable = Invocable < F, Args... > ; |
(ranges TS) | |
Концепт
Invocable
определяет, что вызываемый тип
F
может быть вызван с набором типов аргументов
Args...
с использованием шаблона функции
ranges::invoke
.
Концепт
RegularInvocable
расширяет концепт
Invocable
требованием, чтобы выражение
invoke
сохраняло равенство и не модифицировало ни объект функции, ни аргументы.
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Если не указано иное, каждое выражение, используемое в requires-expression , должно быть сохраняющим равенство и стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.
Примечания
Различие между
Invocable
и
RegularInvocable
является чисто семантическим.
Генератор случайных чисел может удовлетворять требованиям
Invocable
, но не может удовлетворять требованиям
RegularInvocable
(за исключением
комических
примеров
).