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.pRingBufu8Pos); // 此处调用了 scIpcu::StreamMemorySaveCb()

OutputNotice();

return XAG_SUCCESS;

}

相关推荐
NiceCloud喜云5 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
cjhbachelor6 小时前
c++继承
c++
肩上风骋6 小时前
C++14特性
开发语言·c++·c++14特性
QiLinkOS9 小时前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
Irissgwe10 小时前
c++11(lambda表达式与包装器、线程库)
c++·c++11·lambda表达式·线程库·包装器·互斥量库·条件变量库
Peter·Pan爱编程10 小时前
14. Lambda 表达式:随手可写的函数对象
c++·算法·ai编程
不想写代码的星星11 小时前
从分支预测角度看 C++:为什么你的热循环慢得离谱?
c++
郝学胜-神的一滴11 小时前
Qt 高级开发 018:复刻经典登录界面布局与窗口美化全解析
开发语言·c++·qt·程序人生·用户界面
郝亚军11 小时前
IEEE 754 单精度浮点的SEM表示
开发语言·c++·算法
Yyyyyy~13 小时前
【C++】数组篇
开发语言·c++