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

云南高端网站制作价格媒体软文发布平台

云南高端网站制作价格,媒体软文发布平台,宿迁房产网最新房价,沈阳唐朝网络的服务内容📝前言: 这篇文章我们来讲讲C11——包装器:function和bind,对于每个包装器主要讲解: 原型基本语法使用示例 🎬个人简介:努力学习ing 📋个人专栏:C学习笔记 &#x1f380…

📝前言:
这篇文章我们来讲讲C++11——包装器:functionbind,对于每个包装器主要讲解:

  1. 原型
  2. 基本语法
  3. 使用示例

🎬个人简介:努力学习ing
📋个人专栏:C++学习笔记
🎀CSDN主页 愚润求学
🌄其他专栏:C语言入门基础,python入门基础,python刷题专栏,Linux


文章目录

  • 一,function
    • function原型
    • function基本语法
    • function使用示例
  • 二,bind
    • bind原型
    • bind基本语法
    • bind使用示例

一,function

function原型

function原型

template <class T>
class function; // undefined
template <class Ret, class... Args>
class function<Ret(Args...)>;
  • function是一个类模板,是一个包装器。在<functional>头文件中
  • function的实例化对象可以包装存储其他的可以调用对象,如函数指针、仿函数、 lambda 、 bind 表达式等。
  • 存储的可调⽤对象被称为std::function的⽬标。若std::function不含⽬标,则称它为空。调⽤空std::function的⽬标导致抛出std::bad_function_call 异常

function基本语法

基本语法

包装时:

function<callable_ret(arg_list)> newCallable = callable;

使用时:

newCallable((arg_list); // 这样来调用可调用对象
  • 包装静态成员函数:要指定类域并且前面加&才能获取地址
  • 包装普通成员函数:也要指明类域和&。并且,参数列表要多一个参数:传 对象 或 对象指针(因为普通成员函数还有一个隐含的this指针参数)

function使用示例

示例:

#include<functional>
int f(int a, int b)
{return a + b;
}
struct Functor
{
public:int operator() (int a, int b){return a + b;}
};
class Plus
{
public:Plus(int n = 10):_n(n){}static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return (a + b) * _n;}
private:int _n;
};
int main()
{// 包装各种可调用对象function<int(int, int)> f1 = f;function<int(int, int)> f2 = Functor();function<int(int, int)> f3 = [](int a, int b) {return a + b; };cout << f1(1, 1) << endl;cout << f2(1, 1) << endl;cout << f3(1, 1) << endl;// 包装静态成员函数// 成员函数要指定类域并且前面加&才能获取地址function<int(int, int)> f4 = &Plus::plusi;cout << f4(1, 1) << endl;// 包装普通成员函数// 普通成员函数还有一个隐含的this指针参数,所以绑定时传对象或者对象的指针过去都可以function<double(Plus*, double, double)> f5 = &Plus::plusd;Plus pd;cout << f5(&pd, 1.1, 1.1) << endl;function<double(Plus, double, double)> f6 = &Plus::plusd;cout << f6(pd, 1.1, 1.1) << endl;cout << f6(pd, 1.1, 1.1) << endl;function<double(Plus&&, double, double)> f7 = &Plus::plusd;cout << f7(move(pd), 1.1, 1.1) << endl;cout << f7(Plus(), 1.1, 1.1) << endl;return 0;
}

作用:把不同的可调用对象包装起来,方便统一方式的调用。

二,bind

bind原型

bind原型

simple(1)
template <class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);
with return type (2)
template <class Ret, class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);
  • bind 是⼀个函数模板,它也是⼀个可调⽤对象的包装器,可以把他看做⼀个函数适配器
  • 对接收的fn可调用对象进行处理后返回⼀个可调用对象(本质是返回一个仿函数对象)
  • bind 也在<functional>这个头⽂件中
  • 对于获取静态成员变量和普通成员变量也都要指明类域和&
  • 常见的用法: bind 可以用来调整参数个数和参数顺序

bind基本语法

基本语法

包装时:

auto newCallable = bind(callable,arg_list); 

使用时:

newCallable(arg_list);

当我们调⽤newCallable时,newCallable会调⽤callable,并传给它arg_list中的参数。

arg_list中的参数

  • args_list中用placeholders::_n占位符(_n这个占位符在placeholders这个命名空间里面),或直接传具体的值来进行和参数的绑定
  • 数值n表示⽣成的可调用对象中参数的位置:_1newCallable的第⼀个参数,_2为第⼆个参数,以此类推。【即:第一个实参会被传到_1这个位置,第二个会被传到_2

bind使用示例

示例:

#include<functional>
using placeholders::_1;
using placeholders::_2;
using placeholders::_3;
int Sub(int a, int b)
{return (a - b) * 10;
}
int SubX(int a, int b, int c)
{return (a - b - c) * 10;
}
class Plus
{
public:static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return a + b;}
};
int main()
{auto sub1 = bind(Sub, _1, _2);cout << sub1(10, 5) << endl;// 改变参数位置顺序auto sub2 = bind(Sub, _2, _1);cout << sub2(10, 5) << endl;// 调整参数个数(常用)auto sub3 = bind(Sub, 100, _1);cout << sub3(5) << endl;auto sub4 = bind(Sub, _1, 100);cout << sub4(5) << endl;// 分别绑死第123个参数auto sub5 = bind(SubX, 100, _1, _2);cout << sub5(5, 1) << endl;auto sub6 = bind(SubX, _1, 100, _2);cout << sub6(5, 1) << endl;auto sub7 = bind(SubX, _1, _2, 100);cout << sub7(5, 1) << endl;// 成员函数对象进行绑死,就不需要每次都传递了function<double(double, double)> f7 = bind(&Plus::plusd, Plus(), _1, _2);cout << f7(1.1, 1.1) << endl;
}

绑定关系解析:

在这里插入图片描述
附带参数位置交换的绑定:
在这里插入图片描述


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


文章转载自:

http://AIxzXSfM.pwmpn.cn
http://fL6SRopl.pwmpn.cn
http://HGXN9DLc.pwmpn.cn
http://uqzYBC1V.pwmpn.cn
http://vxxIvJdb.pwmpn.cn
http://xNrVqoTF.pwmpn.cn
http://1Gmf1ael.pwmpn.cn
http://3RNmV0NH.pwmpn.cn
http://1zYhoxkW.pwmpn.cn
http://Uh3D7A1A.pwmpn.cn
http://QjqKNJhF.pwmpn.cn
http://mPZ1wD20.pwmpn.cn
http://4mCqF4aK.pwmpn.cn
http://oUgSVUtM.pwmpn.cn
http://C6UE1Klr.pwmpn.cn
http://Eqfc4flj.pwmpn.cn
http://eFDKROGd.pwmpn.cn
http://G2vx21Wg.pwmpn.cn
http://hOdlsjDz.pwmpn.cn
http://UEJzy3un.pwmpn.cn
http://yPjPS3Mg.pwmpn.cn
http://pDrHMKZo.pwmpn.cn
http://uWQw40yb.pwmpn.cn
http://B909WKKo.pwmpn.cn
http://JqFvAs5y.pwmpn.cn
http://TaJtqxJj.pwmpn.cn
http://yut9ytbS.pwmpn.cn
http://6MJk1DjV.pwmpn.cn
http://zZuZx8uk.pwmpn.cn
http://HoC3L08u.pwmpn.cn
http://www.dtcms.com/wzjs/607770.html

相关文章:

  • 汕头个人建站模板开发游戏软件公司
  • 如何确定一个网站的关键词怎么制作自己的免费网站
  • react node.js网站开发wordpress注册弹出框
  • wordpress网站好慢南京网站设计网站建设
  • 地方门户网站源码商务信息网官网
  • 平乡网站制作网站建设教程速成
  • 东营网站设计多少钱免费网站图片素材
  • 福清可以做宣传的网站北京网站设计公司兴田德润怎么样
  • 网站开发培训光山微信电脑版官方下载
  • 怎么用电脑做网站虚拟空间西宁 网站建设
  • 做ppt的模板的网站创业商机
  • 编程入门自学网站中铁建设集团有限公司待遇
  • 本地服务器如何做网站wordpress插件买免费下载
  • 设计案例分享网站大学生做的广告短视频网站
  • 网站备案查询 美橙网最新远程网站建设服务器
  • 如何在行业门户网站上做推广恩施州建设局网站
  • 仿木鱼网络网站全国企业信用信息公开系统
  • 网站建设与管理 试卷wordpress放在二级目录
  • 网站建设与维护 唐清安产品营销策略怎么写
  • 在电脑上做网站的软件wordpress rss 文章
  • 链接关系 网站层次结构企业所得税税负率怎么算的
  • 蚌埠市网站建设建网站要学哪些软件
  • 网站怎样做优惠卷网站建设招标技术要求
  • 网站建设费 项目经费自己建网站做电商还赚钱吗
  • php做购物网站的弊端网站做301跳转的好处
  • dw怎么做网站标题图标深圳方维网站设计公司
  • 网站建设公司教程网站开发专业考啥证书
  • 怎么看网站pr值购物网站导航素材代码
  • 建设一个属于自己网站外网如何访问群晖wordpress
  • 网页设计网站开发需要哪些知识在手机上编程的软件