C++ 使用2λ函数

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++)

我对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++)
        {
            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作为简单的粘合代码。枯燥,我知道,但这就是我喜欢我的代码的方式,尤其是当我必须调试它时或解决编译器错误。