【发布时间】:2014-05-17 13:20:39
【问题描述】:
我可以写一个函数模板:
template<typename T>
void f1(T parameter) { ... }
但在 C++14 中,我也可以创建一个通用 lambda:
auto f2 = [](auto parameter) { ... };
f1内可以直接参考T。在f2 中,没有T 可以引用,但我可以使用decltype 获得相同的效果:
auto f2 = [](auto parameter)
{
using T = decltype(param);
...
};
通用 lambda 的一个优点是我可以完美地转发它。我不能用函数模板做到这一点:
template<typename T>
void fwdToG(T&& param) { g(std::forward<T>(param)); }
fwdToG(f1); // error!
fwdToG(f2); // okay
在某些情况下使用函数模板会比使用通用 lambda 更好吗?
【问题讨论】:
-
等等,你不能?为什么一个是通用参考而另一个不是?错误是什么?这会给您带来什么问题?什么是
g? -
g是我想调用的其他函数;fwdToG是完美转发功能。错误是f1没有类型(它是模板,不是函数),因此尝试将其传递给fwdToG失败。 -
啊,是的,好的。那么这不是回答你的问题吗?
-
我展示的是通用 lambda 优于函数模板的优势。我在问函数模板是否比通用 lambda 有优势。
-
很公平。对于它的价值,我想不出任何东西。
标签: c++ lambda c++14 generic-lambda