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

Ami*_*ark 3 c++ lambda callback member-variables

我正在尝试实现一个将Lambda回调作为参数的c ++函数.问题是,回调是从同一个(被调用的)类中的另一个函数异步启动的.因此,我需要将Lambda存储在一个成员变量中,以便可以通过需要启动回调的异步函数来访问它.

我尝试了所有我能想到的方法来使用成员变量声明,设置和调用Lambda,但代码总是在赋值或调用中崩溃.

这是我正在尝试做的一个被剥离的版本.

声明功能:

void function(const std::function<void()>callback);
Run Code Online (Sandbox Code Playgroud)

从主代码调用函数:

myClass->function([](){cout << "Callback called";});
Run Code Online (Sandbox Code Playgroud)

如果我callback从内部执行function它工作正常,但我找不到一种方法将它存储在一个成员变量(例如m_callback)中,并从同一个类的另一个函数调用它.

Ker*_* SB 5

这应该工作:

#include <functional>
#include <utility>

struct MyThing
{
    std::function<void()> f_;

    void SetCallback(std::function<void()> f) { f_ = std::move(f); }

    void Action() { f_(); }
};
Run Code Online (Sandbox Code Playgroud)

用法:

#include <iostream>

MyThing thing;

thing.SetCallback([](){ std::cout << "Boo\n"; });
thing.Action();
Run Code Online (Sandbox Code Playgroud)

  • @AmiramStark:您的问题几乎可以保证是由于对对象生命周期和同步的理解不完全.但是,如果没有一个更具代表性的例子,除了"编写正确的代码"之外,我很难提出任何建议. (2认同)