在 C++20 中,根据建议 Familiar template syntax for generic lambdas , 下面的代码正确推导出类型 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
。在其他方面,它的行为与任何其他模板函数一样。
关于C++ 泛型 lambdas : pattern type deduction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50431635/