3

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

4

1 回答 1

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 唯一添加的新功能是能够使用显式模板参数列表编写 lambda,而不是(或除了)C++14 的auto. 在其他方面,它的行为就像任何其他模板函数一样。

于 2018-05-20T04:43:30.997 回答