Именованные требования C++: Callable
Тип Callable — это тип, для которого применимы операции INVOKE и INVOKE<R> (используемые, например, в std::function, std::bind и std::thread::thread).
|
| (начиная с C++17) |
|
| (начиная с C++23) |
Требования
Тип T удовлетворяет требованию Callable, если
Заданы
-
f— объект типаT, -
ArgTypes— подходящий список типов аргументов, -
R— подходящий тип возвращаемого значения.
Следующие выражения должны быть корректны:
| Выражение | Требования |
|---|---|
INVOKE<R>(f,std::declval<ArgTypes>()...) | Выражение корректно в невычисляемом контексте. |
Примечания
Указатели на данные-члены являются Callable, хотя вызовы функций при этом не выполняются.
Стандартная библиотека
Кроме того, следующие средства стандартной библиотеки принимают любой тип Callable (а не только FunctionObject):
|
(C++11) | копируемая обёртка для любого вызываемого объекта, допускающего копирующее конструирование (шаблон класса) |
|
(C++23) | обёртка для любого вызываемого объекта, доступная только для перемещения и поддерживающая квалификаторы в заданной сигнатуре вызова (шаблон класса) |
|
(C++26) | копируемая обёртка для любого вызываемого объекта, допускающего копирующее конструирование и поддерживающего квалификаторы в заданной сигнатуре вызова (шаблон класса) |
|
(C++26) | невладеющая обёртка для любого вызываемого объекта (шаблон класса) |
|
(C++11) | связывает один или несколько аргументов с функциональным объектом (шаблон функции) |
|
(C++20)(C++23) | связывает переменное число аргументов с функциональным объектом в заданном порядке (шаблон функции) |
|
(C++11) |
обёртка для ссылки, удовлетворяющая требованиям CopyConstructible и CopyAssignable (шаблон класса) |
|
(C++11)(удалён в C++20)(C++17) | определяет тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
|
(C++11) | управляет отдельным потоком (класс) |
|
(C++20) |
std::thread с поддержкой автоматического присоединения и отмены (класс) |
|
(C++11) | вызывает функцию только один раз, даже если она вызывается из нескольких потоков (шаблон функции) |
|
(C++11) | выполняет функцию асинхронно (возможно, в новом потоке) и возвращает std::future, который будет содержать результат (шаблон функции) |
|
(C++11) | упаковывает функцию, чтобы сохранить её возвращаемое значение для асинхронного получения (шаблон класса) |
См. также
|
(C++17)(C++17)(C++17)(C++17) | проверяет, можно ли вызвать тип (как если бы с помощью std::invoke) с заданными типами аргументов (шаблон класса) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, можно ли вызвать отражённый тип (как если бы с помощью std::invoke) с заданными типами аргументов (шаблон функции) |
|
(C++20)(C++20) | указывает, что вызываемый тип можно вызвать с заданным набором типов аргументов (концепт) |
|
(C++17)(C++23) | вызывает любой объект Callable с заданными аргументами и позволяет указать тип возвращаемого значения(начиная с C++23) (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Callable