c++ - 将 C++ Lambda 存储在成员变量中以用作回调?

标签 c++ lambda callback member-variables

我正在尝试实现一个获取 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/

相关文章:

c++ - decltype(auto) 有哪些用途?

python - 执行功能的条件

c++ - 用zlib提取一个gz文件内容并保存

c++ - 使用 boost::filesystem 时无法链接

java - 使用谓词验证搜索参数

javascript - 在 Node.js CLI 中获取浏览器响应或回调

angularjs - 如何在 Angular 循环中使用异步调用?

javascript - 如何将回调作为参数传递给另一个函数

c++ - 必须在 GUI 线程中创建小部件错误!。如何更正代码?

java - 使用 Lambda 表达式计算名字的数量