一. 什么是Lambda FxRXPt
FK
所谓Lambda,简单的说就是快速的小函数生成。 >/^#Drwb!i
在C++中,STL的很多算法都要求使用者提供一个函数对象。例如for_each函数,会要求用户提供一个表明“行为”的函数对象。以vector<bool>为例,如果想使用for_each对其中的各元素全部赋值为true,一般需要这么一个函数对象, `78V%\
{{!Y]\2S
fly,-$K>LO
F
L=,YP
class filler 6`\ya@
{ ]RIVc3?;$
public : xf,5R9g/
void operator ()( bool & i) const {i = true ;} W?Xiz TW
} ; G>z,#Xt
,Em$ !n
.}`hCt08
这样实现不但麻烦,而且不直观。而如果使用lambda,则允许用户使用一种直观和见解的方式来处理这个问题。以boost.lambda为例,刚才的问题可以这么解决: ig_2={Q@
IL!=mZ>2O
+j[oE I`e
jirbUl
for_each(v.begin(), v.end(), _1 = true ); glUo7^ay7
nH[+n `{o
ux-CpI
那么下面,就让我们来实现一个lambda库。 ~<9{#uM
B'weok
Of[;Qn
tE"Si<[]H$
二. 战前分析 .$rC0<G[K
首先要说明的是,我并没有读过boost.lambda或其他任何lambda库的代码,因此如代码有雷同,纯属巧合。 ra6o>lI(,
开始实现以前,首先要分析出大致的实现手法。先让我们来看几段使用Lambda的代码 Vpp&