包装lambda表达式
Wrapped lambda expressions
这里定义了一个lambda包装器表达式:
function <int(double)> f =
[](double x) -> int{ return static_cast <int> (x*x); };
它是这样使用的:
f(someintvalue);
正常函数和包装lambda之间的区别是什么?
问题是-普通函数和包装lambda之间的区别是什么?
普通函数就是普通函数,你所说的"包装lambda"实际上是一个函数对象。
顺便问一下,为什么要用std::function
?您可以简单地这样写:
auto f = [](double x) { return static_cast <int> (x*x); };
//call
int result = f(100.0);
另外,我省略了返回类型,因为编译器从返回表达式中隐式地知道它。不需要在lambda表达式中写-> int
Lambdas可以捕获周围的作用域([=]或[&]),从而生成包含成员函数的匿名结构。
某些任务,如跨翻译单元访问lambda(类型),或从lambda中获取标准的成员函数指针地址,可能被证明是困难的/无用的,因为无法知道自动生成的"匿名"类型的实际类型(实际上是实现定义的)。
std::function<>
的设计正是为了缓解的问题:能够将函数指针(语义上)绑定到lambda(或者实际上,任何可调用对象)
1:实际上类型可以有外部链接,但是你不能移植从另一个翻译单元引用它,因为实际类型是实现定义的(甚至不需要在c++代码中表示;在原始TU中,您可以使用
decltype
来获得魔法类型。谢谢Luc提供的准确信息)
相关文章:
- 这 4 个 lambda 表达式之间有什么区别?
- 使用成员在类中创建 lambda 表达式
- 使用自动推导的 lambda 参数作为常量表达式
- 将 lambda 表达式传递给 std::function in C++
- 在 lambda 表达式中使用 std::atomic
- 不是 lambda 函数中的常量表达式
- &&对lambda表达式有什么好处?
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 列表.erase 中的 lambda 表达式
- 使用 lambda 表达式的 Raspbian G++ 8.3.0 导致 ']' 之前的预期主表达式 - 即使标准设置为 c++14
- 仅通过引用捕获的 lambda 表达式是否保证不会抛出?
- C++: priority_queue:模板参数中的 lambda 表达式
- 容器如何处理 lambda 表达式的参数
- 在C++ Lambda 表达式中,为什么人们更喜欢按值捕获而不是作为参数传递?
- 如何在 lambda 表达式中传递变量?
- 针对 std::function 的 lambda 表达式和模板推导:为什么会这样?
- 如何修改Lambda表达式以将输出放入文本文件
- C++如何使用lambda表达式来捕获上一次迭代的值
- 为什么Qt在信号和插槽中为lambda表达式抛出错误?
- C++:从捕获函数参数的函数返回 lambda 表达式