std::move_only_function::move_only_function
来自 zh.cppreference.net
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 在移动构造后处于有效但未指定的状态。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 模板参数中的值,如下所示:
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::move_only_function
对象
|
| f | - | 要包装的函数或 可调用 对象 |
| args | - | 用于构造目标对象的参数 |
| il | - | 用于构造目标对象的 std::initializer_list 初始化列表 |
异常
示例
|
本节内容不完整
原因:缺少示例 |
参见
构造新的
std::function
实例
(
std::function<R(Args...)>
的公开成员函数)
|
|
构造新的
std::copyable_function
对象
(
std::copyable_function
的公开成员函数)
|