gpt4 book ai didi

c++ - 任何 lambda 表达式都可以表示为(模板化的)结构吗

转载 作者:行者123 更新时间:2023-11-27 22:54:48 24 4
gpt4 key购买 nike

我正在寻找一个反例来反驳任何 lambda 表达式都可以表示为(模板化)结构的说法。换句话说,可以编写一个源到源编译器,它应该能够将每个 lambda 表达式提升到任何范围之外,并将其表示为模板仿函数类。

例如,对于最终用户来说,下面两个是等价的:

auto foo(int parm){
...
auto f = [x,&y](int z) {..};
..
return foo(parm);
}

可以表示为

template<class X, class Y>
struct Closure {
X x; Y y;
auto operator()(int z) {..};
};
auto foo(int parm) {
...
auto f = Closure<decltype(x), decltype(y)&>{x,y};
...
return f(parm);
}

这种转变总能做到吗?如果没有,是否有一个例子可以证明这一点。谢谢!

最佳答案

lambda 的闭包类型是具有重载的 operator() ( [expr.prim.lambda]/3 ) 的类类型。每次处理 lambda 表达式时,您描述的转换都会由实现完成。

关于c++ - 任何 lambda 表达式都可以表示为(模板化的)结构吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324578/

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