std::copyable_function
Определён в заголовке <functional> | ||
|---|---|---|
template< class... > class copyable_function; // not defined | (1) | (начиная с C++26) |
template< class R, class... Args > class copyable_function<R(Args...)>; template< class R, class... Args > class copyable_function<R(Args...) noexcept>; template< class R, class... Args > class copyable_function<R(Args...) &>; template< class R, class... Args > class copyable_function<R(Args...) & noexcept>; template< class R, class... Args > class copyable_function<R(Args...) &&>; template< class R, class... Args > class copyable_function<R(Args...) && noexcept>; template< class R, class... Args > class copyable_function<R(Args...) const>; template< class R, class... Args > class copyable_function<R(Args...) const noexcept>; template< class R, class... Args > class copyable_function<R(Args...) const &>; template< class R, class... Args > class copyable_function<R(Args...) const & noexcept>; template< class R, class... Args > class copyable_function<R(Args...) const &&>; template< class R, class... Args > class copyable_function<R(Args...) const && noexcept>; | (2) | (начиная с C++26) |
Шаблон класса std::copyable_function — это универсальная полиморфная обёртка для функций. Объекты std::copyable_function могут хранить и вызывать любую функцию-объект CopyConstructible Callable — функции, лямбда-выражения, выражения bind или другие функциональные объекты, а также указатели на функции-члены и указатели на объекты-члены.
Сохранённый вызываемый объект называется целью std::copyable_function. Если std::copyable_function не содержит цели, он называется пустым. В отличие от std::function, вызов пустого std::copyable_function приводит к неопределённому поведению.
std::copyable_function поддерживают все возможные комбинации cv-квалификаторов (кроме volatile), ref-квалификаторов и спецификаторов noexcept, указанные в параметре шаблона. Эти квалификаторы и спецификатор (если есть) добавляются к operator().
std::copyable_function удовлетворяет требованиям CopyConstructible и CopyAssignable.
Типы-члены
| Тип | Определение |
|---|---|
result_type |
R |
Функции-члены
создаёт новый объект std::copyable_function (открытая функция-член) |
|
уничтожает объект std::copyable_function (открытая функция-член) |
|
| заменяет или уничтожает цель (открытая функция-член) |
|
обменивает цели двух объектов std::copyable_function (открытая функция-член) |
|
проверяет, содержит ли std::copyable_function цель (открытая функция-член) |
|
| вызывает цель (открытая функция-член) |
Функции, не являющиеся членами
|
(C++26) | перегружает алгоритм std::swap (функция) |
|
(C++26) | сравнивает std::copyable_function с nullptr (функция) |
Примечания
Реализации могут хранить вызываемый объект небольшого размера внутри объекта std::copyable_function. Такая оптимизация для небольших объектов фактически обязательна для указателей на функции и специализаций std::reference_wrapper и может применяться только к типам T, для которых std::is_nothrow_move_constructible_v<T> является true.
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_copyable_function | 202306L | (C++26) |
std::copyable_function |
Пример
См. также
|
(C++11) | копируемая обёртка для любого вызываемого объекта, который можно скопировать конструированием (шаблон класса) |
|
(C++23) | обёртка с семантикой только перемещения для любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова (шаблон класса) |
|
(C++26) | невладеющая обёртка для любого вызываемого объекта (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/copyable_function