c ++ 0x:通过引用接收lambda作为参数的正确方法
什么是正确的方法来定义一个函数,通过引用接收int->int lambda参数? 
 void f(std::function< int(int) >& lambda); 
要么
 void f(auto& lambda); 
我不确定最后一种forms甚至是合法的语法。
是否有其他方法来定义一个lambda参数?
 你不能有一个auto参数。 你基本上有两个select: 
 选项#1:使用std::function如你所示。 
选项2:使用模板参数:
 template<typename F> void f(F &lambda) { /* ... */} 
 在某些情况下,选项2可能更高效,因为它可以避免为embedded的lambda函数对象分配潜在的堆,但是只有当f可以作为模板函数放在头中时才有可能。 它也可以像任何模板一样增加编译时间和I-cache占用空间。 请注意,它也可能没有效果,就好像lambda函数对象足够小,它可以在std::function对象中内联表示。 
 我将使用template : 
 template<typename Functor> void f(Functor functor) { cout << functor(10) << endl; } int g(int x) { return x * x; } int main() { auto lambda = [] (int x) { cout << x * 50 << endl; return x * 100; }; f(lambda); //pass lambda f(g); //pass function } 
输出:
 500 1000 100 
演示: http : //www.ideone.com/EayVq
我知道这个问题已经被回答了,但是当我正在寻找这个问题的答案时,我正在寻找一些与这里的答案有所不同的东西,我想这可能是OP所指的,所以这里是希望这会帮助别人。
假设你有一个function:
 void print(int n) { printf("%i ", n); } 
为了传递一个lambda到这个函数,你需要做以下的事情:
 print([]{ return 3; }()); 
这显然会传递给函数3。 一个更有用的例子,特别是与OP的问题相关的是一个lambda,它将一个整数作为参数,并返回一个int给结束函数:
 int x = 3; auto lambdaFunction = [](int input) { return (input + 1); }; print(lambdaFunction(x)); 
这是假设你不通过价值或通过引用的lambda,你可以直接做:
 // Pass by value print([=]{ return (x + 1); }()); // Pass by reference print([&]{ return (x + 1); }());