Spec-Zone.ru › C++

Именованные требования C++: Callable

Тип Callable — это тип, для которого применимы операции INVOKE и INVOKE<R> (используемые, например, в std::function, std::bind и std::thread::thread).

INVOKE можно выполнить явно с помощью библиотечной функции std::invoke.

(начиная с C++17)

INVOKE<R> можно выполнить явно с помощью библиотечной функции std::invoke_r.

(начиная с C++23)

Требования

Тип T удовлетворяет требованию Callable, если

Заданы

  • f — объект типа T,
  • ArgTypes — подходящий список типов аргументов,
  • R — подходящий тип возвращаемого значения.

Следующие выражения должны быть корректны:

Выражение Требования
INVOKE<R>(f,std::declval<ArgTypes>()...) Выражение корректно в невычисляемом контексте.

Примечания

Указатели на данные-члены являются Callable, хотя вызовы функций при этом не выполняются.

Стандартная библиотека

Кроме того, следующие средства стандартной библиотеки принимают любой тип Callable (а не только FunctionObject):

function
(C++11)
копируемая обёртка для любого вызываемого объекта, допускающего копирующее конструирование
(шаблон класса)
move_only_function
(C++23)
обёртка для любого вызываемого объекта, доступная только для перемещения и поддерживающая квалификаторы в заданной сигнатуре вызова
(шаблон класса)
copyable_function
(C++26)
копируемая обёртка для любого вызываемого объекта, допускающего копирующее конструирование и поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса)
function_ref
(C++26)
невладеющая обёртка для любого вызываемого объекта
(шаблон класса)
bind
(C++11)
связывает один или несколько аргументов с функциональным объектом
(шаблон функции)
bind_frontbind_back
(C++20)(C++23)
связывает переменное число аргументов с функциональным объектом в заданном порядке
(шаблон функции)
reference_wrapper
(C++11)
обёртка для ссылки, удовлетворяющая требованиям CopyConstructible и CopyAssignable
(шаблон класса)
result_ofinvoke_result
(C++11)(удалён в C++20)(C++17)
определяет тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса)
thread
(C++11)
управляет отдельным потоком
(класс)
jthread
(C++20)
std::thread с поддержкой автоматического присоединения и отмены
(класс)
call_once
(C++11)
вызывает функцию только один раз, даже если она вызывается из нескольких потоков
(шаблон функции)
async
(C++11)
выполняет функцию асинхронно (возможно, в новом потоке) и возвращает std::future, который будет содержать результат
(шаблон функции)
packaged_task
(C++11)
упаковывает функцию, чтобы сохранить её возвращаемое значение для асинхронного получения
(шаблон класса)

См. также

is_invocableis_invocable_ris_nothrow_invocableis_nothrow_invocable_r
(C++17)(C++17)(C++17)(C++17)
проверяет, можно ли вызвать тип (как если бы с помощью std::invoke) с заданными типами аргументов
(шаблон класса)
is_invocable_typeis_invocable_r_typeis_nothrow_invocable_typeis_nothrow_invocable_r_type
(C++26)(C++26)(C++26)(C++26)
проверяет, можно ли вызвать отражённый тип (как если бы с помощью std::invoke) с заданными типами аргументов
(шаблон функции)
invocableregular_invocable
(C++20)(C++20)
указывает, что вызываемый тип можно вызвать с заданным набором типов аргументов
(концепт)
invokeinvoke_r
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API