std::bind

std::bind

C++ 写的少了之后,有一些新特性老式记不住, 这里对std::bind做一个总结

#include <iostream>
#include <thread>
#include <boost/thread/thread.hpp>
#include <boost/bind/bind.hpp>

// 一个很简单的类
class A{
public:
void print(int& a){
  std::cout << "ssfdf" << std::endl;
  a++;
}
};

int main(){
  A a;
  int count = 0;
  // boost::thread t(boost::bind(&A::print, &a, boost::ref(count)));
  // boost::thread t(boost::bind(&A::print, &a, count)); //0
  std::thread t(std::bind(&A::print, &a, std::ref(count)));
  //std::thread t(std::bind(&A::print, &a, count)); //结束后count为0
  t.join();
  std::cout << count << std::endl;
}

boost 中的bind和 std中的bind功能是类似的, 如此可以发现, 写代码确实方便了很多很多.
之前写回调都是各种定义函数指针.
值得注意的是: 如果要传引用的话需要用std::ref

还可以这样写回调函数

int main(){
  A a;
  int count = 0;
  auto func = std::bind(&A::print, &a, std::ref(count));
  func();
  std::cout << count << std::endl;
}

但是返回值是什么呢? 似乎和 std::function<> 有关系, 后面研究出来在补上

int main(){
  A a;
  int count = 0;
  auto func = std::bind(&A::print, &a, std::placeholders::_1);
  func(count);
  std::cout << count << std::endl;
}

例如还可以使用 std::placeholders::_1 将一个位置占用起来, 调用的时候再传入参数. 是不是觉得特别棒. 具体C++怎么做到的, 那位仁兄知道告诉我一下.

#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <boost/bind/bind.hpp>
#include <thread>

class A{
public:

void print(int& a){
  std::cout << "ssfdf" << std::endl;
  a++;
}


void print1(int& a, int &b , int c){
  std::cout << "print1" << std::endl;
  a = b + c;
}

};

int main(){
  A a;
  int count = 0;
  auto func = std::bind(&A::print1, &a, std::placeholders::_1, 100, std::placeholders::_2);
  func(count, 100);
  std::cout << count << std::endl;
}

在A中添加一个新的函数, 通过placeholders::_1占为符号占位,之后再调用的时候再写上.中间是可以间隔参数的哦. 牛逼~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值