gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:22:29 24 4
gpt4 key购买 nike

这是关于这个问题的后续问题: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com