首页 > 其他分享 >回调函数

回调函数

时间:2024-01-10 12:12:16浏览次数:27  
标签:std function typedef 函数 函数指针 回调

两种不同机制的回调函数

1. 

 typedef void (*CallbackFunction)(int); 

       这个语句使用了指向函数的指针来定义回调函数类型。它表示一个接受一个`int`类型参数并且不返回任何值的函数指针类型。

这种方式是C风格的函数指针,它可以用来定义简单的函数指针类型,但是在复杂的场景下可能不够灵活。

#include <iostream>

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

// 接受回调函数作为参数的函数
void PerformOperation(int value, CallbackFunction callback) {
    // 执行某些操作
    std::cout << "Performing operation with value: " << value << std::endl;
    
    // 调用回调函数
    callback(value * 2);
}

// 回调函数
void Callback(int result) {
    std::cout << "Callback function called with result: " << result << std::endl;
}

int main() {
    // 将回调函数传递给 PerformOperation 函数
    PerformOperation(5, Callback);

    return 0;
}

 

2.

typedef std::function<void(float start, float end, const float* pData, std::uint16_t size)> SpeFunction; 

        这个语句使用了C++11引入的`std::function`模板类来定义回调函数类型。它表示一个接受四个参数并且不返回任何值的函数类型。`std::function`提供了更灵活的方式来定义函数类型,它可以容纳函数指针、成员函数指针、函数对象等,使得回调函数的使用更加方便

总的来说,`typedef std::function`的方式更加灵活,并且能够容纳更多类型的回调函数,而`typedef void (*)`的方式则是传统的C风格函数指针的定义方式。在现代C++中,推荐使用`std::function`来定义回调函数类型,因为它提供了更多的特性和灵活性。

#include <iostream>
#include <functional>
#include <cstdint>

// 定义回调函数类型
typedef std::function<void(float, float, const float*, std::uint16_t)> SpeFunction;

// 接受回调函数作为参数的函数
void ProcessSpeData(float start, float end, const float* pData, std::uint16_t size, SpeFunction callback) {
    // 执行一些处理操作
    std::cout << "Processing spe data..." << std::endl;

    // 调用回调函数
    callback(start, end, pData, size);
}

// 回调函数
void HandleSpeData(float start, float end, const float* pData, std::uint16_t size) {
    // 处理频谱数据
    std::cout << "Handling spe data with start: " << start << ", end: " << end << ", size: " << size << std::endl;
    // 其他处理逻辑...
}

int main() {
    // 调用接受回调函数的函数,并传递回调函数作为参数
    float speData[] = {1.0f, 2.0f, 3.0f, 4.0f};
    ProcessSpeData(100.0f, 10.0f, speData, 4, HandleSpeData);

    return 0;
}

 

标签:std,function,typedef,函数,函数指针,回调
From: https://www.cnblogs.com/susiesnai-sun/p/17956213

相关文章

  • Apache Doris 聚合函数源码阅读与解析|源码解读系列
    笔者最近由于工作需要开始调研ApacheDoris,通过阅读聚合函数代码切入ApacheDoris内核,同时也秉承着开源的精神,开发了array_agg函数并贡献给社区。笔者通过这篇文章记录下对源码的一些理解,同时也方便后面的新人更快速地上手源码开发。聚合函数,顾名思义,即对一组数据执行聚合计算......
  • 无涯教程-Redis - EVAL script 命令函数
    RedisEVAL命令用于使用Lua解释器判断脚本,EVAL的第一个参数是Lua5.1脚本,该脚本不需要定义Lua函数,它只是一个Lua程序,将在Redis服务器的上下文中运行,EVAL的第二个参数是表示Redis键名的脚本后的参数数量(从第三个参数开始)。EVALscriptnumkeyskey-语法以下是RedisEVA......
  • C++字符串操作函数笔记#
    1.strcpy()从strSrc地址开始且含有'\0'结束符的字符串复制到strDest开始的地址空间中,返回值类型为char* char*strcpy(char*strDest,constchar*strSrc) { assert((strDest!=NUL)&&(strSrc!=NULL)); char*address=strDest; while((*strDest++=*strSr......
  • c++内存打印函数
    voidPrintBuffer(void*pBuff,unsignedintnLen){if(NULL==pBuff||0==nLen){return;}constintnBytePerLine=16;unsignedchar*p=(unsignedchar*)pBuff;charszHex[3*nBytePerLine+1]={0};printf("--......
  • 无涯教程-Redis - DISCARD命令函数
    RedisDISCARD命令刷新事务中所有先前排队的命令,并将连接状态恢复为正常。DISCARD-返回值返回字符串OKDISCARD-语法redisDISCARD命令的基本语法如下所示:redis127.0.0.1:6379>DISCARD参考链接https://www.learnfk.com/redis/transactions-discard.html......
  • 无涯教程-Redis - UNSUBSCRIBE 命令函数
    RedisUNSUBSCRIBE命令从给定通道取消订阅客户端,如果没有给出通道,则从所有通道取消订阅。UNSUBSCRIBE-语法以下是RedisUNSUBSCRIBE命令的基本语法。redis127.0.0.1:6379>UNSUBSCRIBEchannel[channel...]UNSUBSCRIBE-返回值返回数组。UNSUBSCRIBE-示例redi......
  • 无涯教程-Redis - SUBSCRIBE 命令函数
    RedisSUBSCRIBE命令将客户端订阅到指定的频道。SUBSCRIBEchannel-语法以下是RedisSUBSCRIBE命令的基本语法。redis127.0.0.1:6379>SUBSCRIBEchannel[channel...]SUBSCRIBEchannel-返回值返回数组。SUBSCRIBEchannel-示例redis127.0.0.1:6379>SUBSC......
  • 无涯教程-Redis - PFCOUNT 命令函数
    RedisPFCOUNT命令用于获取由存储在指定变量中的HyperLogLog数据结构计算出的近似基数,如果键不存在,则返回0。PFCOUNT-返回值返回唯一元素的近似数量。当PFCOUNT命令与多个键一起使用时,它将返回HyperLogLogs联合的近似基数。PFCOUNT-语法以下是RedisPFCOUNT命令的......
  • 函数的递归
    函数递归简单来讲就是函数自己调用自己。使用函数的递归的必要条件有两个,一是递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续,二是每次递归调⽤之后越来越接近这个限制条件。举几个例子了解一下递归1.用函数的递归求正整数n的阶乘解析通过分析可知正整数n的阶乘可拆分成n......
  • 无涯教程-Redis - ZSCAN 命令函数
    RedisZSCAN命令迭代"排序集"类型的元素及其关联的分数。ZSCAN-返回值返回数组。ZSCAN-语法以下是RedisZSCAN命令的基本语法。redis127.0.0.1:6379>ZSCANkeycursor[MATCHpattern][COUNTcount]参考链接https://www.learnfk.com/redis/sorted-sets-zscan.h......