c++ - 这个似乎链接 lambda 的 C++14 结构叫什么?

标签 c++ lambda c++14

这是关于这个问题的后续问题:Lambda-Over-Lambda in C++14 ,其中的答案解释了代码。

它是关于创建另一个 lambda 的 lambda,当被调用时,调用传递的 lambda 并将返回值传递给原始 lambda,从而返回第二个 lambda 的新实例。

该示例显示了如何以这种方式链接 lambda。

从原始问题复制:

#include <cstdio>

auto terminal = [](auto term)            // <---------+  
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >---------+
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}

这个结构是否已经有了名称,如果没有,应该叫什么? 它是否类似于其他语言中的结构?

备注:到底有没有用,我不感兴趣。

最佳答案

我环顾四周,发现主要功能是重新排序函数调用,如 answers 中所述。到原来的问题。

所以 world(hello(stdout));重写为 terminal(stdout)(hello)(world);更一般地可以写成 compose(stdout)(hello)(world); .

我认为它只对 lambda 提供了一点点的体面的部分应用程序有用,所以我们可以有 compose(4)([](int x){ return x + 7; })([](int x){ return x * 2; })([](int x){ return x == 22; });如果我的计算(和盲编码)是好的,它应该返回 true。

或强调部分应用:

auto add7 = [](int x){ return x + 7; };
auto dbl = [](int x){ return x * 2; };
auto equal22 = [](int x){ return x == 22; };
assert(compose(4)(add7)(dbl)(equals22));

此实现的一个主要问题可能是无法评估结果,因为最后会返回一个 lambda,因此 this answer 中的构造可能更适合(用逗号而不是括号分隔函数)。

关于c++ - 这个似乎链接 lambda 的 C++14 结构叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25619769/

相关文章:

c++ - 指向 cv 和/或 ref 限定成员函数的指针的 Typedef

java - 验证由 JAVA DSA 签名的 openssl c++ 中的签名?

c++ - 当循环失败时,读取 int 和 string C++

c++ - 如何使用vector和struct?

python - lambda 函数可以在 Python 中递归调用自身吗?

c++ - 如何仅针对一项功能禁用 Cuda 主机设备警告?

c++ - 如何让一个类(class)成员保持未构造状态,以便以后使用 placement new 进行构造

c++ - 为什么 cin.ignore() 行为不稳定?

c# - 如何在 C# 中向 Lambda 函数添​​加属性?

结合两个 lambda 的 Java 实用方法?