【问题标题】:What is the use case for c++20 template lambdas? [duplicate]c++20 模板 lambda 的用例是什么? [复制]
【发布时间】:2022-01-14 07:23:14
【问题描述】:

我们在 C++20 之前就有通用 lambda,可以编写类似的东西。

   auto l = [](auto a, auto b)
   {
       return a+b;
   };

然后 C++20 引入了模板 lambda,我们可以在其中编写类似这样的内容

   auto l = []<typename T>(T a, T b)
   {
       return a+b;
   };

或者这个

   auto l = []<typename T>(T a, auto b)
   {
       return a+b;
   };

有人能解释一下有什么区别吗?
更具体地说,什么模板 lambdas 可以实现 C++20 之前的泛型 lambdas 无法实现的目标?

【问题讨论】:

  • 就像函数模板一样有用。它们可以在类或函数模板的实现中使用

标签: c++ templates lambda c++20


【解决方案1】:
auto l = [](auto a, auto b)

可以使用两个完全不同的参数调用此 lambda。 a 可以是intb 可以是std::string

auto l = []<typename T>(T a, T b)

必须使用具有相同类型的两个参数调用此 lambda。 T,就像在常规模板中一样,只能是单个特定类型。

这是主要区别。在 C++20 之前,您可以使用 static_assert 实现几乎相同的效果,但这会简化它。

【讨论】:

    【解决方案2】:

    我觉得有用的一个用例是立即调用

    []<std::size_t... Is>(std::index_sequence<Is...>)
    {
        // ...
    }(std::make_index_sequence<N>());
    

    pre-template lambda,你必须创建辅助函数。

    【讨论】:

    • 或者更一般地说,非类型模板参数作为一个整体
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2010-10-06
    • 2019-06-14
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多