Я пытаюсь реализовать функцию C ++, которая получает Lambda обратный вызов в качестве параметра. Дело в том, что обратный вызов инициируется асинхронно из другой функции в том же (вызываемом) классе. Поэтому мне нужно сохранить Lambda в переменной-члене, чтобы к ней мог обращаться асинхронная функция, которая должна инициировать обратный вызов.
Я перепробовал все возможные способы объявления, установки и вызова Lambda с помощью переменной-члена, но код всегда дает сбой либо в присваивании, либо в вызове.
Вот вычеркнутая версия того, что я пытаюсь сделать.
Объявление функции:
void function(const std::function<void()>callback);
Вызов функции из основного кода:
myClass->function([](){cout << "Callback called";});
Если я выполню callback
изнутри function
он работает нормально, но я не смог найти способ сохранить его в переменной-члене (например, m_callback
) и вызвать его из другой функции того же класса.
Это должно работать:
#include <functional>
#include <utility>
struct MyThing
{
std::function<void()> f_;
void SetCallback(std::function<void()> f) { f_ = std::move(f); }
void Action() { f_(); }
};
Использование:
#include <iostream>
MyThing thing;
thing.SetCallback([](){ std::cout << "Boo\n"; });
thing.Action();
Просто создайте переменную std :: function и вызовите ее.
#include <iostream>
#include <functional>
struct A{
std::function<void()> cb;
void function(const std::function<void()>callback){
cb=callback;
}
};
int main() {
A a;
a.function([](){std::cout << "Callback called";});
a.cb();
}