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

文章展示了如何在C++中定义和使用回调函数,通过typedef创建了类型别名CbFunc,然后定义了SetCallBackFunction来设置回调。回调参数使用std::bind将类成员函数转换为可调用对象,允许静态类型调用。TestCallBack类中定义了sum方法并使用bind与成员变量c_关联。最后在main函数中实例化TestCallBack并执行回调。

使用方法

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值