有名有型引用
  上面两种LB使用模式,是LB应用的主要模式,它直接反映出了LB的优点。另一方面说,既然LB无非是隐身类,我们没有理由不能把它当作普通变量使用。这个模式是一种简化的functor使用模式。我们可以把LB定义成一个std::function,比如上面的auto lb可以定义成:
  std::function <void(int)> lb; //lb is a function which takes an integer and returns void
  注意到用这个定义,使得我们可以推迟给LB变量赋值,甚至一变量赋多址(不同时间)。下面是一个简单用例:
struct MyLambda
{
std::function <int (int)> _lbda;//line1
int _extra;
};
MyLambda TestLambdaObj(int t)
{
MyLambda ret;
if (t == 1)
{
ret._extra = t;
ret._lbda = [=](int x)  -> int { return t + x; }; //line2
return ret;
}
else
{
ret._extra = t;
ret._lbda = [=](int x)  -> int { return t * x; };//line3
return ret;
}
}
void TestLambdaFun2(int t)
{
MyLambda ret = TestLambdaObj(t);
int v = ret._lbda(t);                                //line4
printf(“v is ‘%d’ for type %d”, v, t);
}
  我们先定义MyLambda数据类,并与其定义了一了function成员_lbda,根据C++ SPEC,他可以由LB转换构造,并且和普通的类变量无甚区别。然后我们可以运行时给它赋值(line2,line3), 当作普通function来使用(line4)。
  注意的是:
  function的定义中没有“闭包”的概念,闭包的形成是在LB创建时实现(line2,line3)。
  把LB赋值给function变量,必然造成调用时(line4)的间接性(通过函数指针),其性能相当于虚拟函数,也不能inline化,当然比直接调用有所下降。
  闭包(closure)是LB的独特附加值
  如果你问为什用LB而不用std::function?我的回答是“闭包”。
  C++用LB来实现闭包,是一个简化繁琐的class初始化的syntax sugar。这一点是std::function所不可替代的。比如说:
  auto sum = 0;
  auto step = 2;
  auto lb = [&](int i){ sum += i + step; }//capture sum and step by ref
  lb形成自己的闭包,自动从环境中俘获了sum和step,若用class实现,上面的程序起码增加10行代码。