std::function 和 std::bind的使用 —— C++

一、官方解释 :
std::function:是一个可调用对象包装器,是一个类模板,可以容纳除了类成员函数指针之外的所有可调用对象,她可以用统一的方式处理函数、函数指针、函数对象,并能保存和延迟他们的执行
std::function:接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表.

自己理解:function和bind一般在用处比较多的地方就是,注册函数回调。在A类中function保存具体的函数指针,B类注册这个函数回调,当A类回调的时候,B类bind绑定类一个方法执行具体的回调任务。

二、代码例子

class AudioRecorder
{
    public:
    AudioRecorder();
    ~AudioRecorder();
    void setAudioWriteListener(AudioWriteLitener listener) {
          std::unique_lock<std::mutex> lock{mMutex};
          mAudioWriteLisener = listener;  
    }
    private:
    typedef std::function<void(void*,int,bool,bool)> AudioWriteLitener;
    AudioWriteLitener mAudioWriteLisener;

    private:
    void notifyAudioData(void* buffer,int len,bool vadSts,bool isFirstFrame) {
         std::unique_lock<std::mutex> lock{mMutex};
         if (mAudioWriteLisener != nullptr) {
             mAudioWriteLisener(buffer,len,vadSts,isFirstFrame);
         }
   }
};

class Manager {
   public:
    virtual ~Manager() {
        if(null != mAudioRecorder) {
            mAudioRecorder = null
        }
    }
    Manager():mAudioRecorder(std::make_shared<AudioRecorder>()) {
   
    }
   void init() {
       if (null != mAudioRecorder) {
          // 当 Audiowrite类中调用notifyAudioData通知的时候就会执行到 Manager  类中的 audioWrite()方法
           mAudioRecorder->setAudioWriteListener(std::bind(&Manager::audioWrite,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4));
       }
  }
   void audioWirte(void *pcmData, long unsigned int pcmLen,bool vadSts,bool isFirstFrame) {
      // do something
   }
   private:
   std::shared_ptr<AudioRecorder> mAudioRecorder;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值