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博客

相关推荐
DARLING Zero two♡22 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
7年老菜鸡23 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Gu Gu Study24 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
Ni-Guvara31 分钟前
函数对象笔记
c++·算法
似霰35 分钟前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript