在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表达式。
答案 0 :(得分:1)
这是标准功能模板演绎。它与此没有什么不同:
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添加的唯一新功能是能够使用显式模板参数列表编写lambdas,而不是(或除了)C ++ 14的auto
。在其他任何方面,它的行为与任何其他模板函数一样。