我正在尝试实现一个获取 Lambda 回调作为参数的 C++ 函数。问题是,回调是从同一(调用)类中的另一个函数异步启动的。因此,我需要将 Lambda 存储在成员变量中,以便需要启动回调的异步函数可以访问它。
我尝试了所有我能想到的使用成员变量声明、设置和调用 Lambda 的方法,但代码总是在赋值或调用中崩溃。
这是我正在尝试做的事情的精简版。
声明函数:
void function(const std::function<void()>callback);
从主代码调用函数:
myClass->function([](){cout << "Callback called";});
如果我从 function
中执行 callback
它工作正常,但我找不到将它存储在成员变量中的方法(例如 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();
关于c++ - 将 C++ Lambda 存储在成员变量中以用作回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621907/