我正在尝试实现一个将Lambda回调作为参数的c ++函数。问题是,回调是从同一个(被调用的)类中的另一个函数异步启动的。因此,我需要将Lambda存储在一个成员变量中,以便可以通过需要启动回调的异步函数来访问它。
我尝试了所有我能想到的方法来使用成员变量声明,设置和调用Lambda,但代码总是在赋值或调用中崩溃。
这是我正在尝试做的一个精简版本。
声明功能:
void function(const std::function<void()>callback);
从主代码中调用该函数:
myClass->function([](){cout << "Callback called";});
如果我从callback
内执行function
它工作正常,但我找不到将其存储在成员变量(例如m_callback
)中并从另一个变量调用它的方法同一类的功能。
答案 0 :(得分:5)
这应该有效:
#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();
答案 1 :(得分:1)
只需创建一个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();
}