C++ 泛型 lambdas : pattern type deduction

标签 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 表达式的问题。

最佳答案

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

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/

相关文章:

c++ - 根位于 arr[0] 的二进制堆有什么好处

c++ - 转义 lambda 的示例代码

ruby - 确定参数/变量是否为 ("is_a?") lambda?

c++ - 局部自动函数变量的销毁与返回值的构造之间的顺序

c++元素在存储在 map 中时丢失

c++ - std::map <int,int> 增量

c++ - C++ 17 if语句带有初始化但无条件

C++17 标准 - 抛弃 const of static

c++ - 将 Rob Hess 的 SIFT 库(使用 C 语言,使用 OpenCV)与 C++ 链接

c# - 非常简单的lambda表达式