c ++ generic lambdas:模式类型推导

时间:2018-05-20 04:22:24

标签: c++ lambda c++17 type-deduction c++20

在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表达式。

1 个答案:

答案 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。在其他任何方面,它的行为与任何其他模板函数一样。

相关问题