По сути, у меня такой код:
struct Receiver {
void receive(std::function<void()> f) {
func_ = f;
}
std::function<void()> func_;
};
void pusher(Receiver& r) {
auto wrapper=[&](std::function<void()> w) {
r.receive([&]() {
cout << "Before" << endl;
w();
cout << "After" << endl;
});
};
wrapper([&]() {
cout << "Original" << endl;
});
}
int main() {
Receiver r;
pusher(r);
r.func_();
return 0;
}
Есть класс, который хранит std :: function, и мы сохраняем функцию в этом классе.Функция создается в «обертке» локальной лямбды другой функции.
Код печатает «До» и вылетает.Если я помещаю весь код внутри «pusher» в main (), то все работает.
Я подозреваю, что проблема в том, что когда вызывается r.receive (), он содержит ссылку на «w», что недопустимопосле возвращения из "толкателя".
Но мне нужно передать лямбду получателю, который создается путем "украшения" другой лямбдой.
Как правильно (в общем) украситьлямбда со ссылкой на какую-то местную лямбду и передать ее куда-нибудь еще?