Namespaces
Variants

C++ named requirements: Callable

From cppreference.net
C++ named requirements

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

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

(since C++17)

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

(since C++23)

Содержание

Требования

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

Дано

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

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

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

Примечания

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

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

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

(C++11)
копируемая обёртка любого копируемого вызываемого объекта
(шаблон класса)
перемещаемая обёртка любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса)
копируемая обёртка любого копируемого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса)
невладеющая обёртка любого вызываемого объекта
(шаблон класса)
(C++11)
привязывает один или несколько аргументов к функциональному объекту
(шаблон функции)
(C++20) (C++23)
привязывает переменное количество аргументов, по порядку, к функциональному объекту
(шаблон функции)
CopyConstructible и CopyAssignable обёртка ссылки
(шаблон класса)
(C++11) (removed in C++20) (C++17)
выводит тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса)
(C++11)
управляет отдельным потоком выполнения
(класс)
(C++20)
std::thread с поддержкой автоматического присоединения и отмены
(класс)
(C++11)
вызывает функцию только один раз, даже если вызывается из нескольких потоков
(шаблон функции)
(C++11)
запускает функцию асинхронно (потенциально в новом потоке) и возвращает std::future , который будет содержать результат
(шаблон функции)
упаковывает функцию для хранения её возвращаемого значения для асинхронного получения
(шаблон класса)

Смотрите также

проверяет, может ли тип быть вызван (как если бы с помощью std::invoke ) с заданными типами аргументов
(шаблон класса)
указывает, что вызываемый тип может быть вызван с заданным набором типов аргументов
(концепт)
(C++17) (C++23)
вызывает любой Callable объект с заданными аргументами и возможностью указания типа возвращаемого значения (since C++23)
(шаблон функции)