/* The best way to implement lambda (with perfect forwarding) is: */
#include <iostream>
using namespace std;
void func(const char* s) {
cout << s << endl;
}
// 1st implementation
template <typename... Args>
auto closure = [] (Args&&... args) {
func(std::forward<decltype(args)>(args)...);
};
// 2nd implementation
auto variadic_lambda = [](auto&&... params) {
func(std::forward<decltype(params)>(params)...);
};
int main() {
closure<const char*>("Hello World");
variadic_lambda("Hello World");
}
/*
* 2nd implementation
* struct SomeFunctionObject
* {
* template <typename... Args>
* auto operator() (Args&&... args) const;
* };
*/
При изучении лямбды C ++ 14 я наткнулся на два способа создания обобщенной лямбды c (с идеальной пересылкой). Я понимаю, что вторая реализация похожа на то, что я показал после main (). Но может ли кто-нибудь помочь мне разобраться в том, что такое первая реализация? Похоже, сам базовый класс замыкания является шаблоном? 1-я реализация также считается как variadi c lambda?