我可以写一个函数模板:
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 更好的情况?