std::copyable_function::copyable_function
из ru.cppreference.net
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 следующим образом:
cv ref noexcept(noex)
|
/*is-callable-from*/<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
)
|