一. 什么是Lambda e58tf3
所谓Lambda,简单的说就是快速的小函数生成。 6K.0dhl>`B
在C++中,STL的很多算法都要求使用者提供一个函数对象。例如for_each函数,会要求用户提供一个表明“行为”的函数对象。以vector<bool>为例,如果想使用for_each对其中的各元素全部赋值为true,一般需要这么一个函数对象, %Y].i/".;P
h*NBSvn
X{5(i3?S
:EC[YAK+D
class filler ^@maF<Jb
{ p6{8t}
public : |>p?Cm
void operator ()( bool & i) const {i = true ;} q-0(
Wx9|
} ; CwzDkr&QC_
cZ/VMQEr
:2&W9v
这样实现不但麻烦,而且不直观。而如果使用lambda,则允许用户使用一种直观和见解的方式来处理这个问题。以boost.lambda为例,刚才的问题可以这么解决: 4H%Ai(F}_
_nW#Cl~
k5Df97\s
{Pi]i?
for_each(v.begin(), v.end(), _1 = true ); Gy[m4n~Z5
;x=0+0JD
fH
5/
那么下面,就让我们来实现一个lambda库。 \H?r[]*c%
"Kn%|\YL@4
[1`&\C_E
<yEd'Z
二. 战前分析 x_KJCU
首先要说明的是,我并没有读过boost.lambda或其他任何lambda库的代码,因此如代码有雷同,纯属巧合。 l:VcV
开始实现以前,首先要分析出大致的实现手法。先让我们来看几段使用Lambda的代码 g"v-hTx
3hzKd_
k'{Bhi4
for_each(v.begin(), v.end(), _1 = 1 ); 6SD9lgF*-
/* --------------------------------------------- */ &Sp2['a!
vector < int *> vp( 10 ); Oc?]L&a