16.5.3 自适应函数符和函数适配器

STL有五个函数符自适应的相关概念:

  1. 自适应生成器
  2. 自适应一元函数
  3. 以适应二元函数
  4. 自适应谓词
  5. 自适应二元谓词

函数符成为自适应的原因是,它携带了标识参数类型和返回类型的typedef成员,这些成员分别是:

  1. result_type
  2. first_argument_type
  3. second_argument_type

例如plus<int>对象的返回类型被标识为plus<int>::result_type,此为int的typedef

### 函数符自适应的意义在于:函数适配器对象可以使用函数对象,并认为存在这些typedef成员。

例如,接受一个自适应函数符参数的函数可以使用result_type成员来声明一个与函数的返回类型匹配的

变量

STL提供了使用这些工具的函数适配器类,其中的例子有binder1st、binder2nd类,作用是将接受两个参数的函数

转换为接受一个参数的函数符(将自适应二元函数转换为自适应一元函数)。

binder1st类:

f2是一个自适应二元函数对象,可创建f1: binder1st(f2, val) f1; // val是第一个参数的特定值 

f1是一个创建的binder1st对象,它与一个将被用作f2( )的第一个参数的特定值(val)相关联。

### 这样,使用单个参数调用f1(x)时,返回的值与将val作为第一参数、将f1( )的参数作为第二参数调用f2( )返回的

### 值相同,即: f1(x); 等价于 f2(val, x); 

bind1st函数

STL提供了比binder1st更方便的bind1st()函数,向其提供用于构建binder1st对象的函数名称和值,它将返回一个这

种类型的对象。

### 如: bind1st(multiplies<double>(), 2.5) 返回一个对象等价于声明一个f1对象

###  binder1st(multiplies<double>(), 2.5) f1; 

binder2ed类:

### 工作方式与binder1st相似,只是将常数赋给第二个参数,而不是第一个参数。

### 同样,它有一个名为 bind2ed 的助手函数,该助手函数的工作方式类似于bind1st。

 

posted @ 2020-08-23 17:19  孱陵  阅读(376)  评论(0编辑  收藏  举报