C++11 中的std::function和std::bind
1. 背景:
C++有不同的调用形式:函数指针、lambda表达式、有operator()的类对象等。
形式不同但调用方式却相同。为了能够统一,引入std::function和std::bind,来实现。
例子:
// 普通函数 int add(int a, int b){return a+b;} // lambda表达式 auto mod = [](int a, int b){ return a % b;} // 函数对象类 struct divide{ int operator()(int denominator, int divisor){ return denominator/divisor; } };
使用std::function后,可将其都保存下来
std::function<int(int ,int)> a = add; std::function<int(int ,int)> b = mod ; std::function<int(int ,int)> c = divide();
2. std::function
std::function是一个可调用对象包装器,可以保存以上所有形式的可调用对象,并且允许延迟执行等操作。比普通函数指针更加灵活和遍历。
3. std::bind
作为一个通用的函数适配器,接受一个可调用对象,生成另一个可调用对象。如std::function, 类成员函数
可以讲可调用对象和参数绑定在一起并且保存。减少调用参数。
a. 绑定一个引用参数:
使用关键字ref()