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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值