当前位置: 首页 > news >正文

加强网站建设的意义网站用户黏度

加强网站建设的意义,网站用户黏度,东莞网站建设提供商,网站开发进度计划函数对象包装器是对函数的封装#xff0c;为函数对象提供一个容器#xff0c;一个封装。C中现有的可调用实体的一种类型安全的包装#xff08;相对来说#xff0c;函数指针的调用不是类型安全的#xff09;#xff0c;换句话说#xff0c;函数对象包装器就是函数的容器。…函数对象包装器是对函数的封装为函数对象提供一个容器一个封装。C中现有的可调用实体的一种类型安全的包装相对来说函数指针的调用不是类型安全的换句话说函数对象包装器就是函数的容器。 当我们有了函数的容器之后便能够更加方便的将函数、函数指针作为对象进行处理。直接调用函数包装器传值就可以调用函数。 函数对象包装器支持4种函数的封装 1.普通函数 2.匿名函数 3.类的成员函数 4.仿函数重载了运算符的函数 1.普通函数的对象包装器 include stdafx.h #include algorithm #include iostream #include vector #include funtionalusing namespace std;int printf1(int value1,int value2) {int ret value1value2;printf(普通函数的类对象包装器);printf(ret %d,ret);return value; }int main() {printf1(3,5);std::functionint(int) function1 printf1;function1(3,6);return 0;} 2.匿名函数的对象包装器 Lambda的本质是一个特殊的匿名的类类型。它是一个带有operator的类即仿函数。仿函数opratoer就是使一个类的使用看上去像一个函数其实现就是类中实现一个operator(),这个类有了类似函数的行为就是一个仿函数类了。 仿函数是一个重载了 operator() 运算符、能行使函数功能的类这个类也称为函数对象类这个类的对象就是函数对象。函数对象本质上是一个对象但其使用形式看起来和函数调用一样 Lambda表达式具体形式如下: [capture](parameters)-return-type{body}最简单的匿名函数是[](){}它没有参数也没有返回值。在匿名函数中[]里面用来捕获函数外部的变量而()里面就是匿名函数的参数{}里面就是函数的执行代码。 auto 名字 []()-返回值{}; 具体介绍 1.[ ] 中括号表示函数对象的构造函数中是否接收外部变量。 [] 表示使用引用的方式获取外部变量 [] 表示使用值的拷贝的方式获取外部变量。2.() 这个小括号是就函数对象中的小括号符后面的参数列表。3.-返回值需要就放不需要就不放。根据自己需要任君选择。4.{...} 就是函数对象的小括号运算符的函数体。 Lambda表达式实现例子 class Addnum{public:AddNum(int x):num_(num){};//int addNum(int x) const {//return num_ x ;//}int operator(){int x} const{return num_ x;} }int main() {//operatorauto add_num AddNum(10);//auto x add_num.addNum(5);auto x add_num(5);std::coutx:xstd::endl;//lambda//替代掉Addnum类auto add_num2 [lamada_num 10](int x){return lamada_num 10};auto lamada_x add_num_2(5);std::coutlamada x:lamada_x std::endl;} lamada函数的对象包装器 #include iostream #include vector #include algorithm #include functional using namespace std;int printf1(int value1,int value2) {int ret value1value2;printf(普通函数的类对象包装器);printf(ret %d,ret);return value; }class Printf_source { public:Printf_source() {} //构造函数/*****************************************//operator()仿函数替代了My_Printf_source函数int My_Printf_source(int n1,int n2) {int ret n1n2;printf(普通函数的类对象包装器);printf(ret %d,ret);return ret;}*********************************************///仿函数 ———————————————————代替My_Printf_source函数int operator()(int n1int n2) {int ret n1n2;printf(普通函数的类对象包装器);printf(ret %d,ret);return ret;}};int main() {//函数对象包装器://为了函数提供了一种容器封装存放在对象或者变量中 printf1(3,5); //打印出8//普通函数的封装//int 返回值(int)参数列表 std::functionint(int) function1 printf1;function1(3,6); //打印出9//匿名函数functionint(int)function2 [](int n1int n2)-int {int ret value1value2;printf(类对象包装器);printf(ret %d,ret);return ret;};function2(7,8); //打印出15return 0;} 再看个下面的例子将对象包装器做为参数传递的情况 #include iostream #includefunctional //提供function模板类//传统C函数 int c_function(int a, int b) {return a b; }//函数对象 class Functor { public:int operator()(int a, int b){return a b;} };//用函数指针做参数 typedef int (*pfun)(int, int);//函数的第一个参数只能接收函数指针 void show1(pfun f, int a, int b) {std::cout f(a, b) std::endl; }//用function...做参数 //函数第一个参数可以接收任何返回值为int,参数为int,int的可调用类型 void show2(std::functionint(int, int) f, int a, int b) {std::cout f(a, b) std::endl; } int main() {show1(c_function, 3, 6); //输出9//show1(Functor(), 3, 3); //编译错误因为Functor()不能转换为函数指针show2(c_function, 3, 5); //输出8show2(Functor(), 3, 3); //输出6system(pause); }对象包装器的赋值操作 成员函数指针是一种指向类的非静态成员函数的指针。它的类型声明需要加上类名 静态成员函数取出静态成员函数的地址时需要通过类名但不是必须的非静态成员函数取出非静态成员函数的地址时需要通过类名但是必须的。非静态成员函数的第一个参数是this指针它是隐藏的因此在包装时需要指明第一个形参的类型为类的类型。 #include iostream #includefunctional//测试用函数 int Minus(int a, int b) {return a - b; }//测试用类 class A { public:int operator()(int a, int b){return a * b;}void show(int a, int b)//普通成员函数{std::cout a b std::endl;}static void staticshow(int a, int b)//静态成员函数{std::cout a b std::endl;} }; int main() {using namespace std::placeholders;A a;//1function赋值类成员函数//第一种方法// 非静态成员函数包含一个隐藏的this指针所以形参需要多定义一个类型Astd::functionvoid(A, int, int) f1(A::show);f1(a, 3, 6); //输出3 6//第二种方法// 非静态成员函数包含一个隐藏的this指针所以形参需要多定义一个类型Astd::functionint(A, int, int) f1 A::show;f1(A(), 3, 6);//*********************************************************************************//2function赋值类静态成员函数//第一种方法std::functionvoid(int, int) f2(A::staticshow);f2(6, 6);//输出6 6//第二种方法std::functionint(intint) f2 A::staticshow; //*********************************************************************************//3function赋值bind//如果函数有多个参数可以绑定部分参数其他的参数在调用的时候指定std::functionint(int) f3 std::bind(Minus, 10, _1);std::cout f3(1) std::endl; //输出9//*********************************************************************************//4function赋值Lambda表达式std::functionint(int, int) f4 [](int a, int b) {return a b; };std::cout f4(3, 9) std::endl; //输出12//*********************************************************************************//5function赋值函数对象//第一种方法std::functionint(int, int) f5 A();std::cout f5(6, 6) std::endl; //输出36//第二种方法std::functionint(int, int) f5 a;std::cout f5(6, 6) std::endl; //输出36system(pause);}
http://www.w-s-a.com/news/518532/

相关文章:

  • 做海淘是在哪个网站网络查控系统设计方案
  • o2o网站建设代理商微信公众号开发文档
  • 网站设计课程总结关于网站备案的公告
  • 网站建设与运营意义到哪查找网站域名
  • 网站及单位网站建设情况眉县住房和城市建设局网站
  • 网站是否能够被恶意镜像wordpress占用
  • 经典设计网站网站等保测评怎么做
  • 重庆做网站公司贴吧廊坊公司快速建站
  • 海外贸易在什么网站做怎么排名到百度第一页
  • 线上注册公司是在哪个网站做高仿网站
  • 网站构架图网上推广平台哪个好
  • 公司网站首页图片素材vi设计的目的和意义
  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化
  • 网站随机代码网站建设费 账务处理
  • 商洛网站建设哪家好网站建设 织梦者
  • 怎么创建收费网站宁夏住房和城乡建设部网站
  • 怎么确认网站是什么语言做的用php和mysql做网站
  • 安徽做网站的公司有哪些星子网络公司
  • 肥西县重点工程建设管理局网站wordpress界面菜单怎么弄
  • 宁夏网站开发设计说明书wordpress主题背景图片
  • 同一个阿里云可以做两个网站吗织梦 帝国 学校网站
  • 城阳网站建设培训网站后台怎么上传文件
  • 重庆茂尔建设集团有限公司网站网页制作教程软件
  • 金湖建设工程质量监督网站高端网站建设公司哪里济南兴田德润实惠吗
  • 站酷设计网站官网入口文字设计seo网站推广工具
  • 专业移动网站建设网站建设软件dw
  • 摄影网站设计思想视觉传达毕业设计作品网站