C++ 通用 lambda:模式类型推导

c++ generic lambdas: pattern type deduction

本文关键字:类型 模式 通用 lambda C++      更新时间:2023-10-16

在 C++20 中,在提案"通用 lambda 的熟悉模板语法"下,以下代码正确推断出类型 T:

auto lamTest = []<typename T>(std::initializer_list<T> const & l)
{
std::vector<T> v{ l };
for (auto && e : v)
std::cout << e << " ";
};
lamTest( { 1,2,3 } );

是否可以在 C++17(或 14(中进行这种模式推断?

注意:我专门询问有关lambda表达式的问题。

这是标准的函数模板推导。这和这个没有什么不同:

template<typename T>
auto lamTest(std::initializer_list<T> const & l)
{
std::vector<T> v{ l };
for (auto && e : v)
std::cout << e << " ";
};

哪个(std::initializer_list不谈(是常规的C++98代码。

C++20 添加的唯一新内容是能够使用显式模板参数列表编写 lambda,而不是(或补充(C++14 的auto。在其他方面,它的行为就像任何其他模板函数一样。