Namespaces
Variants

std::copyable_function:: copyable_function

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
copyable_function ( ) noexcept ;
(1) (начиная с C++26)
copyable_function ( std:: nullptr_t ) noexcept ;
(2) (начиная с C++26)
copyable_function ( const copyable_function & other ) ;
(3) (начиная с C++26)
copyable_function ( copyable_function && other ) noexcept ;
(4) (начиная с C++26)
template < class F >
copyable_function ( F && f ) ;
(5) (начиная с C++26)
template < class T, class ... CArgs >
explicit copyable_function ( std:: in_place_type_t < T > , CArgs && ... args ) ;
(6) (начиная с C++26)
template < class T, class U, class ... CArgs >

explicit copyable_function ( std:: in_place_type_t < T > ,

std:: initializer_list < U > il, CArgs && ... args ) ;
(7) (начиная с C++26)

Создает новый std::copyable_function .

1,2) Конструктор по умолчанию и конструктор, принимающий nullptr , создают пустой std::copyable_function .
3) Конструктор копирования создает std::copyable_function , целевой объект которого является копией целевого объекта other . В противном случае создает пустой std::copyable_function , если other пуст.
4) Конструктор перемещения создает std::copyable_function , целевой объект которого соответствует other . other после перемещения находится в допустимом, но неопределенном состоянии.
5) Пусть VT будет std:: decay_t < F > . Если f является нулевым указателем на функцию, нулевым указателем на член или пустым std::copyable_function (может быть любой другой специализацией), то конструирует пустой std::copyable_function . В противном случае конструирует std::copyable_function , целевой объект которого имеет тип VT и прямое-не-списковое-инициализирован с помощью std:: forward < F > ( f ) .
  • Эта перегрузка участвует в разрешении перегрузки только если VT не совпадает ни с copyable_function , ни со специализацией std::in_place_type_t , и /*is-callable-from*/ < VT > (см. ниже) является true .
  • Программа является некорректной, если std:: is_constructible_v < VT, F > или std:: is_copy_constructible_v < VT > не является true .
6) Пусть VT будет std:: decay_t < T > . Создает std::copyable_function , целевой объект которого имеет тип VT и прямое-не-списковое-инициализировано с помощью std:: forward < CArgs > ( args ) ... .
  • Эта перегрузка участвует в разрешении перегрузки только если оба условия std:: is_constructible_v < VT, CArgs... > и /*is-callable-from*/ < VT > (см. ниже) являются true .
  • Программа является некорректной, если VT не является тем же типом, что и T или std:: is_copy_constructible_v < VT > не является true .
7) Пусть VT будет std:: decay_t < T > . Создает std::copyable_function , целевой объект которого имеет тип VT и прямое-не-списковое инициализируется с il, std:: forward < CArgs > ( args ) ... .
  • Эта перегрузка участвует в разрешении перегрузки только если оба std:: is_constructible_v < VT, std:: initializer_list < U > & , CArgs... > и /*is-callable-from*/ < VT > (см. ниже) являются true .
  • Программа является некорректной, если VT не является тем же типом, что и T или std:: is_copy_constructible_v < VT > не является true .

Для конструкторов (5-7) поведение не определено, если VT не удовлетворяет одновременно требованиям Destructible и CopyConstructible .

Константа /*is-callable-from*/ < VT > зависит от cv , ref и noex в параметре шаблона std::copyable_function следующим образом:

**Примечание:** Весь текст в данном фрагменте находится внутри тегов ` `, которые обозначают код на C++. Согласно инструкциям, код на C++ не переводится, включая ключевые слова, идентификаторы и синтаксические конструкции. Поэтому перевод не требуется, исходный формат полностью сохранен.
cv ref noexcept ( noex ) /*вызываемо-из*/ < VT >
noexcept ( false ) std:: is_invocable_r_v < R, VT, Args... > &&

std:: is_invocable_r_v < R, VT & , Args... >

noexcept ( true ) std:: is_nothrow_invocable_r_v < R, VT, Args... > &&

std:: is_nothrow_invocable_r_v < R, VT & , Args... >

const noexcept ( false ) std:: is_invocable_r_v < R, const VT, Args... > &&

std:: is_invocable_r_v < R, const VT & , Args... >

const noexcept ( true ) std:: is_nothrow_invocable_r_v < R, const VT, Args... > &&

std:: is_nothrow_invocable_r_v < R, const VT & , Args... >

& noexcept ( false ) std:: is_invocable_r_v < R, VT & , Args... >
& noexcept ( true ) std:: is_nothrow_invocable_r_v < R, VT & , Args... >
const & noexcept ( false ) std:: is_invocable_r_v < R, const VT & , Args... >
const & noexcept ( true ) std:: is_nothrow_invocable_r_v < R, const VT & , Args... >
&& noexcept ( false ) std:: is_invocable_r_v < R, VT, Args... >
&& noexcept ( true ) std:: is_nothrow_invocable_r_v < R, VT, Args... >
const && noexcept ( false ) std:: is_invocable_r_v < R, const VT, Args... >
const && noexcept ( true ) std:: is_nothrow_invocable_r_v < R, const VT, Args... >

Содержание

Параметры

other - другой std::copyable_function для копирования или перемещения
f - функция или Callable объект для обёртывания
args - аргументы для конструирования целевого объекта
il - std::initializer_list для конструирования целевого объекта

Исключения

3) Может выбросить std::bad_alloc при ошибке выделения памяти или распространить исключение, выброшенное при инициализации целевого объекта.
5-7) Может выбросить std::bad_alloc при ошибке выделения памяти или распространить исключение, выброшенное при инициализации цели. Никаких исключений не выбрасывается, если VT является типом указателя на функцию или специализацией std::reference_wrapper .

Пример

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

создает новый экземпляр std::function
(публичная функция-член std::function<R(Args...)> )
создает новый объект std::move_only_function
(публичная функция-член std::move_only_function )