Namespaces
Variants

std::move_only_function:: move_only_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* )
move_only_function ( ) noexcept ;
(1) (начиная с C++23)
move_only_function ( std:: nullptr_t ) noexcept ;
(2) (начиная с C++23)
move_only_function ( move_only_function && other ) noexcept ;
(3) (начиная с C++23)
move_only_function ( const move_only_function & ) = delete ;
(4) (начиная с C++23)
template < class F >
move_only_function ( F && f ) ;
(5) (начиная с C++23)
template < class T, class ... CArgs >
explicit move_only_function ( std:: in_place_type_t < T > , CArgs && ... args ) ;
(6) (начиная с C++23)
template < class T, class U, class ... CArgs >

explicit move_only_function ( std:: in_place_type_t < T > ,

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

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

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

Для конструкторов (5-7) поведение не определено, если VT не удовлетворяет требованиям Destructible , или если std:: is_move_constructible_v < VT > равно true , но VT не удовлетворяет требованиям MoveConstructible .

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

**Примечание:** В данном фрагменте весь текст уже находится внутри тегов ` ` и ` `, которые содержат исключительно C++ код и специфические термины. Согласно инструкциям, такой текст не подлежит переводу. HTML-разметка и атрибуты сохранены в оригинальном виде.
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::move_only_function для перемещения
f - функция или Callable объект для обёртки
args - аргументы для конструирования целевого объекта
il - std::initializer_list для конструирования целевого объекта

Исключения

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

Пример

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

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