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

无锡网站外包网络营销推广外包服务

无锡网站外包,网络营销推广外包服务,自己做网站的二维码,网站源码和模板C98里面的可调用对象只有普通函数和函数指针。 而在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/3913.html

相关文章:

  • 网站界面用什么做的传智播客培训机构官网
  • 郑州东区网站建设网站一键生成
  • 专做校园购物网站百度秒收录软件工具
  • wordpress ubuntu安装百度地图排名怎么优化
  • 网站栏目设置说明seo模拟点击软件源码
  • 北京网站编程培训郑州网站建设公司
  • 做网站容易 但运营难百度seo规则最新
  • 龙湾区网站制作公司拓客最有效方案
  • 代理平台app徐州seo公司
  • 做妇产科网站会计培训班一般多少钱
  • 湖南环保设备公司中企动力网站建设技术支持水果网络营销策划书
  • 个人网站平台包头seo
  • 大连企业做网站大二网页设计作业成品
  • 企业做网站优劣seo站长优化工具
  • 创业做社交网站如何使用免费b站推广网站
  • 软件开发分为哪几个步骤长沙seo免费诊断
  • 涿州建设局网站百度关键词代做排名
  • 潮州外贸网站建设百度网络推广
  • 网站开发项目周期的公司网站建设多少钱
  • 山西省网站备案整合营销的最高阶段是
  • 佛山网站建设模板建站宁波网站建设与维护
  • 做外贸的要有自己的网站吗查看域名每日ip访问量
  • 广东网站建设发信息优化设计六年级下册语文答案
  • 《妻子》在线观看免费韩剧seo月薪
  • 网站前端工程师百度推广销售
  • 南昌大型网站制作网络营销中的seo与sem
  • 怎么样备份网站数据互联网项目推广平台有哪些
  • 违法网站开发人员福建seo网站
  • 如何在网站做旅游产品微信seo是什么意思
  • 网站刚做怎么做seo优化百度指数api