Используя 2 лямбда-функции - PullRequest
0 голосов
/ 03 апреля 2020

Я не настолько знаком с лямбда-выражением. Есть ли шансы вызвать рефлекс ie в lbd и lbd в рефлекс ie? Я получаю сообщение об ошибке в рефлексе ie: «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;

        }
    };

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете хранить вторую лямбду в объекте 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...