C++11 bind和std::function
C++ bind函数
可调用对象:
- 是函数指针
- 是一个具有operator()成员函数的类对象
- 是一个可被转换为函数指针的类对象
- 是一个类成员函数指针
可调用对象包装器:std::function:
可以保存函数延迟执行,比较适合作为回调函数。
bind函数:
bind函数看做一个通用的函数适配器,它接受一个可调用对象callable,生成一个新的可调用对象newCallable。
它可以把原可调用对象callable的某些参数预先绑定到给定的变量中(也叫参数绑定),然后产生一个新的可调用对象newCallable。
可以绑定类和成员函数,调用指定类的成员函数,或者传入的某个类,利用std::placeholders::_1
网络编程中, 经常要使用到回调函数。 当底层的网络框架有数据过来时,往往通过回调函数来通知业务层。 这样可以使网络层只专注于数据的收发, 而不必关心业务。
bind 用来将可调用对象和参数一起进行绑定,绑定后结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候。
作用:
- 将可调用对象和其参数绑定成一个仿函数。
- 将多元可调用对象转化为(n-1)元可调用对象
- 将函数和功能解耦,得到足够具体的功能闭包。
std::placeholders::_1是一个占位符,代表这个位置将在函数调用时,被传入的第一个参数所替代。
参考:《深入应用C++ 11》