std::invocable, std::regular_invocable
Объявлено в заголовочном файле <concepts> | ||
|---|---|---|
template< class F, class... Args >
concept invocable =
requires(F&& f, Args&&... args) {
std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
/* not required to be equality-preserving */
};
| (начиная с C++20) | |
template< class F, class... Args > concept regular_invocable = std::invocable<F, Args...>; | (начиная с C++20) |
Концепция invocable задаёт, что вызываемый тип F можно вызвать с набором аргументов Args... с помощью шаблона функции std::invoke.
Концепция regular_invocable расширяет концепцию invocable, требуя, чтобы выражение invoke сохраняло равенство и не изменяло ни функциональный объект, ни аргументы.
Сохранение равенства
Выражения, объявленные в requires-выражениях концепций стандартной библиотеки, должны сохранять равенство (за исключением случаев, когда указано иное).
Примечания
Различие между invocable и regular_invocable носит исключительно семантический характер.
Генератор случайных чисел может удовлетворять invocable, но не может удовлетворять regular_invocable (за исключением комичных примеров).
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
- 18.7.2 Концепция
invocable[concept.invocable] - 18.7.3 Концепция
regular_invocable[concept.regularinvocable] - Стандарт C++20 (ISO/IEC 14882:2020):
- 18.7.2 Концепция
invocable[concept.invocable] - 18.7.3 Концепция
regular_invocable[concept.regularinvocable]
См. также
|
(C++17)(C++17)(C++17)(C++17) | проверяет, можно ли вызвать тип (как если бы с помощью std::invoke) с заданными типами аргументов (шаблон класса) |
Внешние ссылки
Шуточный пример генератора случайных чисел, который удовлетворяет и invocable, и regular_invocable. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/concepts/invocable