# std::experimental::function

< cpp‎ | experimental

定义于头文件 `<experimental/functional>` |  |
template< class > class function; /* undefined */ |  | (库基础 TS)
template< class R, class... Args > class function<R(Args...)> |  | (库基础 TS)

`std::experimental::function` 是 std::function 的修改版本，支持类型擦除分配器。

### 成员类型

类型 | 定义
`allocator_type` | std::experimental::erased_type

### 成员函数

(构造函数) | 构造新的 `std::experimental::function` 实例 (公开成员函数)
operator= | 赋值新目标 (公开成员函数)
swap | 交换内容 (公开成员函数)
get_memory_resource | 获得指向此对象用来分配内存的 memory_resource 的指针 (公开成员函数)

### 非成员函数

std::experimental::swap(std::experimental::function) | 特化 `swap` 算法 (函数模板)
operator==operator!= | 比较 std::experimental::function 和 nullptr (函数模板)

### 辅助类

std::uses_allocator<std::experimental::function> | 特化 std::uses_allocator 类型特性 (类模板特化)

## 等同于 std::function 的成员

### 成员类型

类型 | 定义
`result_type` | `R`
`argument_type` | 若 sizeof...(Args)==1 ，且 `T` 为 `Args...` 中第一个并为唯一的类型则为 `T`
`first_argument_type` | 若 sizeof...(Args)==2 且 `T1` 为 `Args...` 中二个类型的第一个则为 `T1`
`second_argument_type` | 若 sizeof...(Args)==2 且 `T2` 为 `Args...` 中二个类型的第二个则为 `T2`

### 成员函数

(析构函数) | 析构 std::function 实例 (`std::function<R(Args...)>` 的公开成员函数)
operator bool | 检查是否包含了有效的目标 (`std::function<R(Args...)>` 的公开成员函数)
operator() | 调用其目标 (`std::function<R(Args...)>` 的公开成员函数)
##### 目标访问
target_type | 获得 std::function 所存储的目标的typeid (`std::function<R(Args...)>` 的公开成员函数)
target | 获得指向 std::function 所存储的目标的指针 (`std::function<R(Args...)>` 的公开成员函数)