std::experimental::function<R(Args...)>::function

来自cppreference.com
 
 
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
 
 
 
function() noexcept;
(1) (库基础 TS)
function( std::nullptr_t ) noexcept;
(2) (库基础 TS)
function( const function& other );
(3) (库基础 TS)
function( function&& other );
(4) (库基础 TS)
template< class F >
function( F f );
(5) (库基础 TS)
template< class Alloc >
function( std::allocator_arg_t, const Alloc& alloc ) noexcept;
(6) (库基础 TS)
template< class Alloc >

function( std::allocator_arg_t, const Alloc& alloc,

          std::nullptr_t ) noexcept;
(7) (库基础 TS)
template< class Alloc >

function( std::allocator_arg_t, const Alloc& alloc,

          const function& other );
(8) (库基础 TS)
template< class Alloc >

function( std::allocator_arg_t, const Alloc& alloc,

          function&& other );
(9) (库基础 TS)
template< class F, class Alloc >
function( std::allocator_arg_t, const Alloc& alloc, F f );
(10) (库基础 TS)

从各种源构造 std::experimental::function

1-2) 构造 function 。
3-4) 复制 (3) 或移动 (4) other目标*this目标。若 other,则调用后 *this 将亦为
5)f 的副本初始化目标。若 f 是指向函数的空指针或指向成员的空指针,则调用后 *this 将为。此构造函数仅若 f 对参数类型 Args... 和返回类型 R 可调用 (Callable) 才参与重载决议。
6-10)(1-5) ,除了用 alloc 分配 function 可能使用的任何内部数据结构的内存。这些构造函数将 alloc 当做类型擦除的分配器。

目标为函数指针或 std::reference_wrapper 时,保证小对象优化,即始终直接存储这些目标于 std::experimental::function 对象内,不发生动态分配。其他大对象可能在动态分配的存储中构造,并由 std::experimental::function 对象通过指针访问。

若构造函数移动或复制函数对象,包含 std::experimental::function 的实例,则由使用分配器构造用分配器 this->get_memory_resource() 进行移动或复制。

类型擦除的分配器

function 的接收分配器参数 alloc 的构造函数将参数当做类型擦除的分配器。以分配器参数(若指定)确定 function 用来分配内存的 memory_resource 指针,如下:

alloc 的类型 memory_resource 指针的值
不存在(构造时不指定分配器) 构造时 std::experimental::pmr::get_default_resource() 的值。
std::nullptr_t 构造时 std::experimental::pmr::get_default_resource() 的值。
可转换为 std::experimental::pmr::memory_resource*
的指针类型
static_cast<std::experimental::pmr::memory_resource*>(alloc)
std::experimental::pmr::polymorphic_allocator
的特化
alloc.resource()
任何其他符合分配器 (Allocator) 要求的类型 指向 std::experimental::pmr::resource_adaptor<A>(alloc) 类型对象的指针,其中 Aalloc 的类型。指针仅在 function 对象的生存期内保持合法。
非以上类型 程序为病式

参数

other - 用于初始化 *this 的函数对象
f - 用于初始化 *this 的可调用对象
alloc - 用于内部内存分配的分配器
类型要求
-
F 必须满足可调用 (Callable) 可复制构造 (CopyConstructible) 的要求。

异常

3,8)other目标是函数指针或 std::reference_wrapper 则不抛出,否则可能抛出 std::bad_alloc 或存储的可调用对象的复制构造函数所抛出的任何异常。
4) (无)
5,10)f 是函数指针或 std::reference_wrapper 则不抛出,否则可能抛出 std::bad_alloc 或存储的可调用对象的复制构造函数所抛出的任何异常。
9) (无)

示例