泛型 Lambda
[](auto param1, auto param2, ...) { // 函数体 };
template<typename T1, typename T2> auto process(T1&& arg1, T2&& arg2) { return static_cast<int>(std::forward<T1>(arg1)) * static_cast<double>(std::forward<T2>(arg2)); } auto PerfectForward = [](auto&&... args) { return process(std::forward<decltype(args)>(args)...); }; int main() { cout << PerfectForward(10, 3.14) << endl; return 0; }
输出如下:
31.4
// 接受任意数量和类型的参数 auto printAll = [](auto&&... args) { (std::cout << ... << args) << std::endl; // C++17 折叠表达式 }; int main() { printAll(1, " hello ", 3.14, '!'); return 0; }
输出如下:
1 hello 3.14!
// 这个泛型 Lambda: auto lambda = [](auto x) { return x * 2; }; // 大致等价于: class AnonymousClass { public: template<typename T> auto operator()(T x) const { return x * 2; } };
// 这个 Lambda 只有在类型支持 + 操作时才能编译 auto add = [](auto a, auto b) { return a + b; }; // 编译错误:如果传入不支持 + 操作的类型 // add(std::vector<int>{}, std::vector<int>{}); // 错误!

浙公网安备 33010602011771号