以前学了很久c++,却没有涉及到c++11的新特性的使用,自己也太水了点,最近开始继续深入学习c++,着重对c++11的新特性的学习和理解。
今天见到了神奇的function,来个std::function,可以用来创建一个指向一个函数,函数对象,或者lambda表达式的类型,本质上可以指向任何可调用的对象。
一般用作函数指针或者用作实现回调函数的参数。
语法如下:
std::function<R(ArgType...)>
其中R代表函数返回类型的值,ArgType代表的是参数类型的列表,注意是可变参数。
下面是一个function作为函数指针作为自定义参数列表的情况下使用,可以撇和lambda表达式一起使用,功能强大。
#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
using namespace std;
void process(const vector<int> &vec, <span style="background-color: rgb(102, 255, 153);">function<void(int)></span> f)
{
for(auto&i : vec)
f(i);
}
void print(int num)
{
cout<<num<<" ";
}
int main()
{
vector<int> vec;
for (int i = 0; i <10; ++i)
vec.push_back(i);
process(vec, print);
cout<<endl;
int sum =0;
process(vec, <span style="background-color: rgb(255, 255, 0);">[&sum](int num){sum+=num;}</span>); //使用了lambda表达式,配合使用,而这种情况下函数指针typedef不能使用。
cout<<"sum = "<<sum<<endl;
system("pause");
return 0;
}
效果如下