【C++ 11 新特性】function 函数包装器的使用
文章目录
- 1.为什么要使用 function 呢?
- 2.作为函数的回调函数
- 3.包装不同的函数
- 4.包装类的成员函数
1.为什么要使用 function 呢?
统一接口:可以用同样的方式处理各种可调用对象
灵活性:运行时可以动态改变调用的函数
回调机制:非常适合实现回调函数
存储函数:可以存储在容器中,实现函数表
2.作为函数的回调函数
void calculate(int a, int b, function<int(int, int)> callback)
{int res = callback(a, b);cout << "res :" << res << endl;
}int main()
{//传递不同的回调函数calculate(10, 5, [](int a, int b) {return a + b; });calculate(10, 5, [](int a, int b) {return a - b; });calculate(10, 5, [](int a, int b) {return a * b; });return 0;
}
3.包装不同的函数
#include <iostream>
#include <functional>
#include <vector>using namespace std;int Add(int a, int b)
{return a + b;
}int main()
{vector<function<int(int, int)>> vecFun;//vecFun.push_back(Add);vecFun.push_back([](int a, int b) {return a + b; });vecFun.push_back([](int a, int b) {return a - b; });vecFun.push_back([](int a, int b) {return a * b; });vecFun.push_back([](int a, int b) {return a / b; });for (auto& func : vecFun) {cout << func(10, 5) << endl;}return 0;
}
4.包装类的成员函数
class Calculator {public:int add(int a, int b) {return a + b;}
};int main()
{Calculator cal;function<int(int, int)> func = [&cal](int a, int b){return cal.add(a, b); };cout << func(10, 5) << endl;return 0;
}