Я должен сделать асинхронный вызов внутри лямбды, и как только асинхронный вызов завершится, я должен вызвать саму лямбду.
Я пытаюсь объяснить мою проблему с помощью кода:
typedef function<void(int id)> Callback;
AsyncWork1(Callback call, int id, string)
{
//...
call(id);
}
AsyncWork2(Callback call, int id, double, string)
{
//...
call(id);
}
void AsyncWorks(Callback final_callback, int id)
{
Callback lambda = [&lambda, final_callback, id](int next_work) -> void
{
if(next_work == 1)
{
//...
AsyncWork1(lambda, 2, "bla bla");
}
else if(next_work == 2)
{
//...
//the lambda variable no longer exists
AsyncWork2(lambda, 3, 0.0, "bla bla");
}
else if(next_work == 3)
{
//...
final_callback(id);
}
};
lambda(1);
}
int main()
{
AsyncWorks(...);
AsyncWorks(...);
AsyncWorks(...);
AsyncWorks(...);
return 0;
}
Проблема в том, что когда код выходит из функции "AsyncWorks (...)", локальная переменная "lambda" больше не существует.
У меня естьПрочитайте несколько веток, в которых рассказывается о рекурсивной лямбде, но я не нашел никакого решения.
Как я могу решить эту проблему?