3

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

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

这是我正在尝试做的一个精简版。

声明函数:

void function(const std::function<void()>callback);

从主代码调用函数:

myClass->function([](){cout << "Callback called";});

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

4

2 回答 2

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();
于 2013-10-27T18:47:14.520 回答
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();

}
于 2013-10-27T18:50:09.443 回答