gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:26:30 36 4
gpt4 key购买 nike

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

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com