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

国产比较好的精华微软优化大师

国产比较好的精华,微软优化大师,统战部网站 微信公众号建设,关于做网站的pptC98里面的可调用对象只有普通函数和函数指针。 而在C11里面可调用的对象有下面几种: 普通函数函数指针仿函数lambda表达式(匿名函数)包装器 普通函数、函数指针、仿函数、lambda表达式我在以前的文章里其实已经介绍过了 包装器 在C11里面有…

C++98里面的可调用对象只有普通函数和函数指针。
而在C++11里面可调用的对象有下面几种:

  • 普通函数
  • 函数指针
  • 仿函数
  • lambda表达式(匿名函数)
  • 包装器
    普通函数、函数指针、仿函数、lambda表达式我在以前的文章里其实已经介绍过了

包装器

在C++11里面有多种类型的可调用对象,包装器可以将这些对象包装起来,给我们提供一个统一的视角。相当于给外面再套了一层盒子。

包装器的定义

//1
template <class T> function;     // undefined
//2
template <class Ret, class... Args> 
class function<Ret(Args...)>;

它的定义貌似很奇怪,包装器提供了模板,2是1的特化,Ret指出可调用对象的返回值类型,并且给我们提供了可变参数,用一个省略号...指出模板参数或函数参数是一个包。
function包含在头文件<functional>里面,而且在std域里
包装方式:function<返回类型(参数类型1,参数类型2,...., 参数类型n)> name = 可调用对象
使用方式:name(参数1, 参数2, ...,参数n)


使用方式类似于函数
例一:包装普通函数

#include <iostream>
#include <functional>
using namespace std;int f(int x, int y)
{return x - y;
}
int main(void)
{//用包装器包装起来function<int(int, int)> f1 = f;cout << f1(2, 1) << endl;return 0;
}

例二:包装lambda表达式

	//包装可调用对象lambda表达式function<int(char, char, char)> f2 = [](char e1, char e2, char e3)mutable->int{return e1 - e2 + e3;};cout << f2('z', 'a', 'x') << endl;

例三:包装仿函数

class Student
{
public://重载(),仿函数char operator()(string str){return str[0];}
};//包装可调用对象,仿函数function<char(string)> f3 = Student();cout << f3("hello") << endl;

在某些情况下我们可能需要提供一个统一的接口来接收这些类型,就需要使用到包装器。
包装器一般会和std::bind结合使用

std::bind

std::bind在包装器中有如下作用
作用1:调整参数顺序
作用2:调整参数个数

simple(1)	
template <class Fn, class... Args>
bind (Fn&& fn, Args&&... args);with return type (2)	
template <class Ret, class Fn, class... Args>
bind (Fn&& fn, Args&&... args);

bind在包装器里面的作用简单来说就是利用旧的可调用对象创建了一个新的。第一个参数是一个万能引用,用来接收可调用对象,而它使用后面的参数包指明新对象的函数参数。

int f(int x, int y)
{return x - y;
}//用包装器包装起来function<int(int, int)> f1 = f; //普通函数cout << f1(2, 1) << endl;//使用bindfunction<int(int, int)> ff1 = bind(f, placeholders::_1, placeholders::_2);cout << ff1(2, 1);

在使用std::bind的时候,使用placeholders::_n指明旧的可调用对象的参数,n对应参数在原来的参数列表里是第几个。这里的placeholders::_1指的就是x。

那么我们可以利用bind来调整参数的顺序

function<int(int, int)> ff1 = bind(f, placeholders::_2, placeholders::_1);

一些特定情况下,某个参数的值是固定的。调整参数的个数,实际上调整的是bind新创建对象的参数。

	function<int(int)> f4 = bind(f, 95, placeholders::_1);cout << f4(12) << endl;

对于对象f来说,它调用的时候需要两个int类型的参数。当我们进行如上操作的时候,将第一个参数固定成了95,调用的时候,就只需要传递一个参数就可以。
使用bind调整参数个数时需要注意

  • 如果想要固定某一个参数,在bind的时候需要指明
  • 指明以后,placeholders::_X,这个X从旧可调用对象的下一个参数开始算起。
  • function也需要做相应的改变,实例化的时候,用bind固定的参数类型不需要再写进来。
http://www.15wanjia.com/news/17242.html

相关文章:

  • 西安市城乡建设委员会网站免费域名注册服务网站
  • h5免费制作平台易企秀网页版惠州网站seo排名优化
  • 卡通类网站设计网站建设全网营销
  • 有哪些学做衣服的网站百度公司全称
  • 如何免费建设网站seo快速优化文章排名
  • 鸿运通网站建设怎么样首页关键词优化公司
  • 做爰全过程网站企业推广方式有哪些
  • 桐城市住宅和城乡建设局网站百度指数排名
  • 动画毕业设计代做网站东莞seo顾问
  • 网站怎么续费网站搭建费用
  • 深圳制作网站流程搜客
  • 汕头做网站的公司律师推广网站排名
  • 网站毕设代做长尾关键词搜索
  • 做赌博彩票网站吗十大互联网平台
  • 湖北联兴建设有限公司网站最基本的网站设计
  • 白城网站建设济南头条新闻热点
  • 潇朋友免费班级网站建设系统网站到首页排名
  • 做网站需要Excel表格吗制作网站要多少费用
  • 公司建立网站流程企业策划
  • 373网站怎么做这样的网站宁波正规seo快速排名公司
  • 织梦如何做英文网站吴江seo网站优化软件
  • hbuilder制作简单网页网络优化seo是什么工作
  • 海南网站建设介绍谷歌官网登录入口
  • 学网站设计培训电话小红书seo排名
  • php站点搭建百度推广官网
  • 做网站学什么语言网站关键词排名外包
  • 找人做软件去哪个网站找广州网站建设系统
  • 黄石网站制作公司网络推广一个月的收入
  • 郑州哪家做网站好百度一下首页登录入口
  • 做h5那个网站模板好如何做游戏推广