1. 函数对象包装器function
为了函数提供了一种容器(封装),存放在对象或者变量中。通俗一些的理解就是把函数当做对象来处理。
(1)支持4种函数的封装
//1.普通函数 //2.匿名函数 //3.类成员函数 //4.仿函数(重载了()运算符的函数)
普通函数的封装
#include#include #include #include using namespace std; int test(int n) { cout << n << endl; return n; } //应用举例 int main() { //函数对象包装器: //为了函数提供了一种容器(封装),存放在对象或者变量中 test(1); // 返回值;(int)参数列表; function f = test; f(123); return 0; }
匿名函数的封装
类成员函数的封装
仿函数(重载了()运算符的函数)的封装
#include#include #include #include using namespace std; int test(int n) { cout << n << endl; return n; } class CTest { public: CTest() {} int MyTest(int n) { cout << n << endl; return n; } //仿函数 int operator()(int n) { cout << n << endl; return n; } }; //应用举例 int main() { //函数对象包装器: //为了函数提供了一种容器(封装),存放在对象或者变量中 test(1); //支持4中函数的封装 //1.普通函数 //2.匿名函数 //3.类成员函数 //4.仿函数(重载了()运算符的函数) //普通函数的封装 // 返回值;(int)参数列表; function f = test; //f(123); //匿名函数 function f2 = [](int n)->int { cout << n << endl; return n; }; f2(123); //类的成员函数 CTest*指this指针 function f3 = &CTest::MyTest; CTest t; f3(&t,123); //仿函数的调用,t是对象,类似于函数的使用 t(123); function f4 = &CTest::operator(); f4(&t,123); return 0; }
2. bind机制
参数不想按顺序进行传递,类似默认参数,但可以打破顺序。
#include#include #include #include using namespace std; //参数比较多 void add(int a,int b,int c) { cout << a << b << c << endl; } int main() { //bind机制:参数不想按顺序进行传递,类似默认参数,但可以打破顺序 //函数与参数绑定在一起,变成新的对象 auto a=bind(add,1,2,3); a(); //输出123 //第二个参数在实际的运行再给值,placeholders::_1 占位符,_1表示第一个参数 auto foo2 = bind(add, 1, placeholders::_1, 3); foo2(3); //输出133 //第二个参数在实际的运行再给值,placeholders::_1 占位符,_1表示第一个参数 _1表示第二个参数 auto foo3 = bind(add, placeholders::_2, placeholders::_1, 3); //1对应placeholders::_1,2对应placeholders::_2 foo3(1,2); //输出213 return 0; }
3. 视频学习地址:函数对象包装器function与bind机制
4. 学习笔记:函数对象包装器function与bind机制笔记
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)