C ++异步递归lambda-将自身捕获为值,而不是引用

时间:2018-06-25 08:31:17

标签: c++ asynchronous lambda

我可以这样制作递归lambda。

std::function<void ()> a = [&a] () {
 a();
};

但是我想将lambda复制为值,而不是引用。因为这种情况。

std::function<void ()> a = [&a] () {
 asyncFunction([&] () { // async function like setTimeout, http request, etc...
  // this callback is called after local variable a is destroyed!
  a(); // error
 });
};

如何解决此问题?这是我最好的主意。

// using pointer
auto a = new std::function<void ()>;
*a = [a] () {
 asyncFunction([=] () { 
  if (recursionIsEnd) delete a;
  else (*a)();
 }
};

我认为它将起作用...但是看起来很糟糕。异步lamba递归有什么好的解决方案吗?

0 个答案:

没有答案