C++ 使用2λ函数
我对lambda表达式不太熟悉。 是否有机会在lbd中调用reflexie,在reflexie中调用lbd? 我在反射中得到错误:“lbd未被捕获” 提前谢谢你C++ 使用2λ函数,c++,lambda,C++,Lambda,我对lambda表达式不太熟悉。 是否有机会在lbd中调用reflexie,在reflexie中调用lbd? 我在反射中得到错误:“lbd未被捕获” 提前谢谢你 auto reflexie = [&tab,nrl,o,nrc,nro,lbd](int x, int y,int dirx,int diry) -> void { x+=dirx; y+=diry; for(int k = 0; k < nro; k++)
auto reflexie = [&tab,nrl,o,nrc,nro,lbd](int x, int y,int dirx,int diry) -> void {
x+=dirx;
y+=diry;
for(int k = 0; k < nro; k++)
{
tab[o[k].p.l][o[k].p.c]=o[k].t;
}
while(x>=0 && x<nrl && y>=0 && y<nrc){
if(tab[x][y]=='@' || tab[x][y] =='v' || tab[x][y] =='>' || tab[x][y] =='<' || tab[x][y] =='^'||tab[x][y] =='X'||tab[x][y] =='*') break;
if(tab[x][y]=='_' && tab[x-1][y-1]=='#'){lbd(x,y,-1,+1);}
tab[x][y]='#';
x+=dirx;
y+=diry;
}
};
auto lbd = [&tab,nrl,o,s,nrc,nro,reflexie](int x, int y,int dirx,int diry) -> void {
x+=dirx;
y+=diry;
int a = x;
while(x>=0 && x<nrl && y>=0 && y<nrc){
if(tab[x][y]=='@' || tab[x][y] =='v' || tab[x][y] =='>' || tab[x][y] =='<' || tab[x][y] =='^' || tab[x][y] =='X'||tab[x][y] =='*') break;
if(tab[x][y]=='_' || tab[x][y]=='|') {
if(tab[x][y]=='_' && (tab[x][y-1]=='#' || tab[x][y+1]=='#')){break;}
if(tab[x][y]=='|' && (tab[x][y-1]=='#' || tab[x][y+1]=='#')){break;}
if(tab[x][y]=='|' && tab[x+1][y-1]=='#'){reflexie(x,y,-1,-1);}
if(tab[x][y]=='_' && tab[x+1][y+1]=='#'){reflexie(x,y,+1,-1);}
break;
}
tab[x][y]='#';
x+=dirx;
y+=diry;
}
};
auto-reflexie=[&tab,nrl,o,nrc,nro,lbd](int x,int y,int dirx,int diry)->void{
x+=dirx;
y+=diry;
对于(int k=0;k=0&&x=0&&y无效{
x+=dirx;
y+=diry;
int a=x;
当(x>=0&&x=0&&y时,可以将第二个lambda存储在第一个lambda之前定义的std::function
对象中。下面是一个简化示例:
#include <functional>
#include <iostream>
int main()
{
int i = 10;
std::function<void()> g;
auto f = [&g]() { std::cout << 'f'; g(); }; // needs to be captured by reference,
g = [f, &i]() { std::cout << 'g'; if (--i) f(); };
f();
}
#包括
#包括
int main()
{
int i=10;
std::函数g;
自动f=[&g](){std::你能在lbd被声明/定义之前捕获它吗?你能给我一个解决方法吗?@jrok的答案似乎有效生产代码的枯燥想法是:除非它真的解决了问题,否则不要这样做,使用lambdas作为简单的粘合代码。枯燥,我知道,但这就是我喜欢我的代码的方式,尤其是当我必须调试它时或解决编译器错误。