原文链接:C++11 wrapper装饰器 bind+function
前言
装饰器本身是为了更好的支持多态性,减小开发的复杂度和代码量.
c++11标准
bind函数
格式
//定义
template< class F, class... Args >
bind( F&& f, Args&&... args );
//示例
int func(int a,int& b){
return a+b;
}
int b=2;
auto func1=std::bind(func,a,std::ref(b));
第一个参数就是函数指针,如果是普通成员函数的话,第二个参数为实例对象引用
func1大致类型为:
(std::_Bind, std::reference_wrapper))(int, int&)>)
不同的封装格式不同,例如使用占位符的格式会增加placeholders部分
按绑定函数类型分:
- 普通函数
- 普通成员函数
- 静态成员函数
按参数类型分:
- 普通参数
- 引用参数
- 占位符
特性
- const类型参数在bind里面基本上没啥意义,普通参数bind之后,对应参数的值也不会变化
- 占位符必须从_1开始递增使用
- 占位符不能替代引用参数, 引用参数能在函数内被修改,占位符不能实现这个特性
示例
#include<functional>
#include<iostream>
using namespace std::placeholders;
int func(int a,int& b){
return a+b;
}
class C{
public:
C(){
}
static int scall(int a,int& b){
return a+b;
}
int call(int a,int& b) {
return a+b;
}
};
int main(){
int a=1;