c++回调函数——类成员函数作参数

使用方法

1 定义基本类型

typedef std::function<int (int,int)> CbFunc;

2 定义回调函数的设置接口

void SetCallBackFunction(CbFunc func) 

3 回调参数(通常回调参数需要static类型,而类成员函数可以通过bind函数实现转换)

auto cb = std::bind(&TestCallBack::sum, this, std::placeholders::_1, std::placeholders::_2);

代码示例


#include <cwchar>
#include <functional>
#include <iostream>

///< 定义
typedef std::function<int(int, int)> CbFunc;

CbFunc sFunc = nullptr;
///< 设置回调函数
void SetCallBackFunction(CbFunc func) {
  sFunc = func;
  return;
}

///< 运行目标函数
void RunTarget() {
  if (nullptr != sFunc) {
    int rval = sFunc(1, 2);
    printf("Rval %d\n", rval);
  }
}

///< 定义
class TestCallBack {
public:
  int sum(int a, int b) { return a + b + c_; }

  void run() {
    auto cb = std::bind(&TestCallBack::sum, this, std::placeholders::_1,
                        std::placeholders::_2);
    SetCallBackFunction(cb);
  }

private:
  int c_ = 0;
};

int main() {
  TestCallBack test;
  test.run();

  RunTarget();
  return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值