声明方式:function<R(Args...)>f;
其中 R
为返回值,Args...
为形参,f
为名称。
一个 function
可以作为函数直接使用。
function<int(int,int)>f[4]={
[](int x,int y){return x+y;},
[](int x,int y){return x-y;},
[](int x,int y){return x*y;},
[](int x,int y){return x/y;}
};
//声明一个数组,每个元素都是一个 function<int(int,int)>
for(int i=0;i<4;++i)
cout<<f[i](5,2)<<' ';
//output:7 3 10 2
常用来代替函数指针。
看着好高级
functional 库在 C++14 给大部分模板都加入了默认类型 void
,如:greater<void>
、plus<void>
等。
这里的 void
可以省略,因此以后就可以不用写具体类型了:
vector<pair<int,int>>v;
//...
sort(begin(v),end(v),greater<pair<int,int>>());//C++11
sort(begin(v),end(v),greater<>());//C++14
- 非常方便。
bit_not<>
在 C++98 的 functional 库中有提到。