std::bind

博客介绍了使用C++创建回调函数的方法,尤其适用于需用户提供未来执行且带预定义参数的函数场景。通过定义类和成员函数,创建接受回调函数的函数,使用绑定方法创建回调对象,最终实现2秒后通过回调机制调用指定方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

std::bind 可以方便地用来创建回调函数,尤其是在那些需要用户提供一个在未来某个时间点执行,并且可能带有预定义参数的函数的地方。下面是一个使用 std::bind 创建回调函数的例子,我们将这个回调函数用于定时器事件:

#include <iostream>
#include <thread>
#include <chrono>
#include <functional>

// 假设我们有一个类,它有一个方法将在一段时间后执行某种操作
class Worker {
public:
    void performTask(int value, std::string message) {
        std::cout << "Worker received: " << value << ", " << message << std::endl;
    }
};

// 定义一个使用std::bind创建回调函数的函数
void scheduleTask(std::function<void()> task, std::chrono::seconds delay) {
    std::this_thread::sleep_for(delay);
    task();  // 在延迟时间过后调用回调函数
}

int main() {
    Worker worker;

    // 使用std::bind创建一个针对Worker实例的回调函数
    auto callback = std::bind(&Worker::performTask, &worker, 10, "Callback triggered!");

    // 将此回调函数传递给scheduleTask函数,设定2秒后执行
    scheduleTask(callback, std::chrono::seconds(2));

    // 主线程继续执行其他任务...
    
    // 当scheduleTask中的休眠结束时,将会调用callback,执行worker.performTask

    return 0;
}

// 运行上述代码,2秒后控制台会输出:"Worker received: 10, Callback triggered!"

在这个例子中,我们首先定义了一个类 Worker 和其成员函数 performTask。然后我们创建了一个 scheduleTask 函数,它接受一个无参数的回调函数,并在一个指定的延迟后执行。

接着,在 main 函数中,我们使用 std::bind 绑定了 Worker 类的一个实例的方法 performTask,以及预先设定的参数。这样就创建了一个可以作为回调函数使用的对象 callback

最后,我们将 callback 作为参数传递给 scheduleTask 函数,从而实现了在2秒后通过回调机制调用 Worker::performTask 方法的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折戟不必沉沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值