这是一个定义的lamba包装器表达式:
function <int(double)> f =
[](double x) -> int{ return static_cast <int> (x*x); };
它的用法如下:
f(someintvalue);
普通函数和包裹的lambdas之间有什么区别?
答案 0 :(得分:2)
问题是 - 普通函数和包裹的lambda有什么区别?
普通函数是一个普通函数,你所谓的“包裹的lambda”实际上是一个函数对象。
顺便问一下,为什么要使用std::function
?你可以写下这个:
auto f = [](double x) { return static_cast <int> (x*x); };
//call
int result = f(100.0);
另外,我省略了返回类型,因为编译器从返回表达式中隐含地知道它。无需在lambda表达式中编写-> int
。
答案 1 :(得分:1)
Lambdas可以捕获周围的范围([=]或[&amp;]),从而产生包含成员函数的匿名结构。
某些任务,比如跨翻译单元访问lambda(类型),或从lambdas中获取标准指向成员函数的地址,可能会很难/无用,因为无法知道自动生成的“匿名”类型的实际类型(并且是实际上是实现定义的。)
std::function<>
旨在缓解 问题:能够将函数指针(语义上)绑定到lambda(或者实际上,无论callable object)
1 :实际上类型可以有外部链接,但是你不能可移植地引用来自另一个翻译单元的类型,因为实际类型是实现定义的(并且不需要甚至可以在C ++代码中表达;在原始TU中你可以使用
decltype
来获得魔法类型。谢谢,Luc对此有很好的准确性)