我可以这样制作递归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递归有什么好的解决方案吗?