C++ 项目中的 std::function

/* scIpcu.h */

#include "AsyncRingOut.h" /* FunRingCb */

class scIpcu

{

private:

AsyncRingOut *pRingOut;

FunRingCb BindSetBufCb();

};

/* scIpcu.cpp */

scIpcu::scIpcu(): pRingOut(NULL),

{

pRingOut = new AsyncRingOut();

}

XAG_VOID scIpcu::IpcuCapStreamRecvCallback(XAG_U8 id, XAG_U32 pdata, XAG_U32 length, XAG_U32 cont, XAG_U32 total_length)

{

CIF_STREAM_HEADER_S *send_data = NULL;

send_data = (CIF_STREAM_HEADER_S *)pdata;

pRingOut->RingSet((XAG_VOID *)send_data, BindSetBufCb());

}

FunRingCb scIpcu::BindSetBufCb()

{

// std::bind看作通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表。

return ( std::bind(&scIpcu::StreamMemorySaveCb, this, std::placeholders::_1, std::placeholders::_2) );

}

XAG_VOID scIpcu::StreamMemorySaveCb(XAG_VOID *pVoid, XAG_VOID *pRingBuf)

{

case E_COMMAND_STREAM_JPG:

pstJpegDcf = (JPEG_STREAM_DCF *)pVoid;

dcf_exif_set_createtime(&pstJpegDcf->DcfData);

}

/* AysncRingOut.h */

typedef std::function<void(XAG_VOID *, XAG_VOID *)> FunRingCb;

/* AysncRingOut.cpp */

XAG_S32 AsyncRingOut::RingSet(XAG_VOID *pVoid, FunRingCb cbfunRingset)

{

cbfunRingset(pVoid, stRingbuf.pRingBuf[u8Pos]); // 此处调用了 scIpcu::StreamMemorySaveCb()

OutputNotice();

return XAG_SUCCESS;

}

相关推荐
No0d1es1 小时前
2025年 CSP-J1 入门级初赛 C++真题
开发语言·c++·青少年编程·csp·信息学奥赛·初赛
橙子也要努力变强1 小时前
C++中的多态
c++
ysa0510302 小时前
虚拟位置映射(标签鸽
数据结构·c++·笔记·算法
m0_748248022 小时前
C++中的位运算符:与、或、异或详解
java·c++·算法
草莓熊Lotso3 小时前
C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
前端·网络·c++·人工智能·后端·python·功能测试
共享家95274 小时前
LRU 缓存的设计与实现
开发语言·c++
草莓熊Lotso4 小时前
Linux 基础开发工具入门:软件包管理器的全方位实操指南
linux·运维·服务器·c++·人工智能·网络协议·rpc
小龙报4 小时前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
晨非辰5 小时前
【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
c语言·开发语言·数据结构·c++·算法·面试·排序算法
2301_795167209 小时前
玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为
c语言·c++·rust