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;

}

相关推荐
SHERlocked931 小时前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
tang&2 小时前
哈希碰撞攻防战:C++闭散列与开散列实现全解析
c++·哈希算法
眠りたいです2 小时前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库
小灰灰搞电子2 小时前
Rust可以取代C++么?
开发语言·c++·rust
微笑倾城3 小时前
Windows平台下CMake工程中使用protobuf
c++·cmake
AA陈超3 小时前
枚举类 `ETriggerEvent`
开发语言·c++·笔记·学习·ue5
C语言小火车3 小时前
【C++】学生管理系统设计与实现丨SQLite数据库版本
开发语言·c++
charlie1145141913 小时前
AVX 指令集系列深度介绍:领域、意义、以及 AVX AVX2 的基本用法与样例
开发语言·c++·人工智能·软件工程·并行计算·avx
曼巴UE54 小时前
UE C++ UI的折叠动画,隐藏收缩经验分享
c++·ue5