Я могу написать шаблон функции:
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
Существуют ли ситуации, когда использование шаблона функции было бы лучше, чем использование универсальной лямбда-выражения?
g
? - person Lightness Races in Orbit   schedule 05.04.2014g
— это какая-то другая функция, которую я хочу вызвать;fwdToG
— это функция идеальной переадресации. Ошибка в том, чтоf1
не имеет типа (это шаблон, а не функция), поэтому попытка передать егоfwdToG
не удалась. - person KnowItAllWannabe   schedule 05.04.2014