function 是一个函数对象的概念。
function可以配合bind使用,存储bind表达式结果,使bind可以多次调用。
function位于命名空间boost,头文件 #include<boost/function.hpp>
1、function存储普通函数:
int f(int a, int b) { return b + a; };
int main()
{
//存储普通函数
function<int(int, int)> func; //无参构造 一个function对象
assert(!func);
func = f; //function 对象存储了f
if (func) //function可以转换为bool值
{
std::cout << func(10, 20); //调用function的operator()
func = 0; //相当于func.clear() //清空function
}
}
2、function存储成员函数
struct demo_class
{
int add(int a, int b) { return a + b; }
int operator()(int x) { return x * x; }
};
存储成员函数时 ,可以直接在function声明的函数里指定类的类型,然后用bind绑定成员函数;
function<int(demo_class&, int, int)> func1;
func1 = bind(&demo_class::add, _1, _2, _3);
demo_class sc;
std::cout << func1 << std::endl;
也可以在函数类型中仅写出成员函数签名, 在bind时直接绑定类的实例
function<int(int, int)> func2;
func2 = bind(&demo_class::add, &sc, _1, _2);
std::cout << func2(10, 20);
3、使用ref库
function可以直接调用被ref库包装的函数对象,这个功能可以不分的弥补boost.ref没有operator()的缺陷
function<void(int, const& )> func(ref(x)); //function包装引用
4、用于回调
//待完善。。。。。