【发布时间】:2023-03-29 15:27:01
【问题描述】:
C++14 泛型 lambda 是否对语言带来了真正的改进,或者它们是一种语法糖?是否有一些情况
[](auto param1, auto param2, /* ... */ auto paramN)
{
return /* ... */;
}
不能替换为
template <typename Type1, typename Type2, /* ... */ typename TypeN>
auto foo(Type1&& param1, Type2&& param2, /* ... */ TypeN&& paramN)
{
return /* ... */;
}
或
struct bar
{
template <typename Type1, typename Type2, /* ... */ typename TypeN>
auto operator()(Type1&& param1, Type2&& param2, /* ... */ TypeN&& paramN)
{
return /* ... */;
}
};
?
@Kerrek SB 提供了非常有趣的链接 in the comments,它们说明了通用 lambda 的强大功能:
Boost.Hana:用于表达元编程的异构组合器 (github)
【问题讨论】:
-
你可以问同样的非泛型 lambdas。
-
原来
lambda是语法糖;为了更容易>o -
您的问题表明语法糖永远不会给语言带来任何真正的改进。我强烈不同意这一点。
-
@Constructor 该标准已经要求编译器将 lambda(通用或非通用)替换为具有
operator()成员函数的自动生成的类。如果编译器可以做到,我想不出任何你自己不能做到的情况。 (但我最近看到了 lambda 的一些非常有创意的用法,这些用法可以实现我认为不可能的事情,所以我还不能完全确定。)
标签: c++ lambda syntactic-sugar c++14 generic-lambda