C++ Weekly - Episode 128 脱水版: C++20's Template Syntax for Lambda
C++20 Lambda 的模板语义
C++20 引入的模板 Lambda
- 例子:
auto l = [](auto first, auto second) { return first + second; };
l(2, 4.1); // return 6.1
该 lambda 可以自动推导两个参数各自的类型, 输出正确结果.
- 例子:
auto l = []<typename T>(T first, T second) { return first + second; };
std::cout << l(1.1, 2); // error
我们也可以显式指定模板参数, 这种情况下, 必须保证两个入参类型相同, 否则将无法推导编译.
error: no match for call to ' (main()::<lambda()>) (double, int) '
- 例子:
我们可以指定模板类型, 比如传入 std::vector. 此时函数可以使用容器的某些特性.
auto l = []<typename T>(const std::vector<T> &v) { return v.size(); };
std::cout << l(std::vector<int>{1, 2, 3, 4});
Refs: