関数テンプレートを書くことができます:
template<typename T>
void f1(T parameter) { ... }
しかし C++14 では、ジェネリック ラムダも作成できます。
auto f2 = [](auto parameter) { ... };
内で直接f1
参照できますT
。内では、参照する必要はf2
ありませんT
が、次を使用して同じ効果を得ることができますdecltype
。
auto f2 = [](auto parameter)
{
using T = decltype(param);
...
};
汎用ラムダの利点は、完全転送できることです。関数テンプレートではそれを行うことはできません:
template<typename T>
void fwdToG(T&& param) { g(std::forward<T>(param)); }
fwdToG(f1); // error!
fwdToG(f2); // okay
関数テンプレートを使用する方が一般的なラムダを使用するよりも優れている状況はありますか?