C++回调函数-实操(二)

回调通常通过函数指针、函数对象(仿函数)、Lambda 表达式或者 std::function 来实现。

1、函数指针实现回调

这一方法实现回调比较好记,就记住把函数当作参数传给方法,在方法中调用方法。

复制代码
#include <iostream>

// 回调函数类型
typedef void (*CallbackFunction)(int);

// 使用回调函数的函数
void performCallback(int value, CallbackFunction callback) {
    // 执行某些操作
    std::cout << "Performing operation with value: " << value << std::endl;

    // 调用回调函数
    callback(value * 2);
}

// 回调函数
void callbackFunction(int value) {
    std::cout << "Callback executed with value: " << value << std::endl;
}

int main() {
    performCallback(5, callbackFunction);
    return 0;
}

2、函数对象(仿函数)实现回调

复制代码
#include <iostream>

// 仿函数类
class CallbackClass {
public:
    void operator()(int value) const {
        std::cout << "Callback executed with value: " << value << std::endl;
    }
};

// 使用回调函数对象的函数
void performCallback(int value, const CallbackClass& callback) {
    // 执行某些操作
    std::cout << "Performing operation with value: " << value << std::endl;

    // 调用回调函数对象
    callback(value * 2);
}

int main() {
    CallbackClass callbackObj;
    performCallback(5, callbackObj);
    return 0;
}

3、Lambda 表达式实现回调

复制代码
#include <iostream>

// 使用回调Lambda的函数
void performCallback(int value, const std::function<void(int)>& callback) {
    // 执行某些操作
    std::cout << "Performing operation with value: " << value << std::endl;

    // 调用回调Lambda
    callback(value * 2);
}

int main() {
    // 定义并传递Lambda作为回调
    performCallback(5, [](int value) {
        std::cout << "Callback executed with value: " << value << std::endl;
    });
    return 0;
}

推荐阅读

C++ std::tr1::function和std::tr1::bind模板类介绍,qt测试-CSDN博客

相关推荐
禾小西5 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨5 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG6 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
优橙教育6 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
SEO_juper6 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
西柚小萌新7 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛7 小时前
cpp学习笔记--常量指针
java·开发语言·算法
半杯咖啡半行码7 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
caoerzhong7 小时前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源
时间的拾荒人7 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试