西安网站建设sxyun微信企业号网站开发软件

web/2025/9/26 11:18:14/文章来源:
西安网站建设sxyun,微信企业号网站开发软件,网站建设手机版模板,搜索引擎优化规则在C中存在“可调用对象”这么一个概念。准确来说#xff0c;可调用对象有如下几种定义#xff1a; 是一个函数指针#xff1a; int print(int a, double b) {cout a b endl;return 0; } // 定义函数指针 int (*func)(int, double) print…在C中存在“可调用对象”这么一个概念。准确来说可调用对象有如下几种定义 是一个函数指针 int print(int a, double b) {cout a b endl;return 0; } // 定义函数指针 int (*func)(int, double) print;是一个具有operator()成员函数的类对象仿函数  #include iostream #include string #include vector using namespace std;struct Test {// ()操作符重载void operator()(string msg){cout msg: msg endl;} };int main(void) {Test t;t(我是要成为海贼王的男人!!!); // 仿函数return 0; }是一个可被转换为函数指针的类对象  #include iostream #include string #include vector using namespace std;using func_ptr void(*)(int, string); struct Test {static void print(int a, string b){cout name: b , age: a endl;}// 将类对象转换为函数指针operator func_ptr(){return print;} };int main(void) {Test t;// 对象转换为函数指针, 并调用t(19, Monkey D. Luffy);return 0; }是一个类成员函数指针或者类成员指针  #include iostream #include string #include vector using namespace std;struct Test {void print(int a, string b){cout name: b , age: a endl;}int m_num; };int main(void) {// 定义类成员函数指针指向类成员函数void (Test::*func_ptr)(int, string) Test::print;// 类成员指针指向类成员变量int Test::*obj_ptr Test::m_num;Test t;// 通过类成员函数指针调用类成员函数(t.*func_ptr)(19, Monkey D. Luffy);// 通过类成员指针初始化类成员变量t.*obj_ptr 1;cout number is: t.m_num endl;return 0; }关于应该注意到的一些细节都在注释里面了  #includeiostream using namespace std; /*1.是一个函数指针2.是一个具有operator()成员函数的类对象仿函数3.是一个可被转换为函数指针的类对象4.是一个类成员函数指针或者类成员指针 *///普通函数 void print(int num, string name) {cout id num name name \n; }using funcptr void(*)(int, string); //类 class Test { public:// 重载void operator()(string msg){cout 仿函数 msg \n;}// 将类对象转化为函数指针operator funcptr()// 后面的这个()不需要写任何参数{// 不能返回hello虽然hello的参数也是int和string// 但是hello在未示例化之前是不存在的world是属于类的return world;// 虽然在定义的时候没有返回值但是在函数体里面必须要返回实际的函数地址}void hello(int a, string s){cout number a name s \n;}static void world(int a, string s){cout number a name s \n;}int m_id 520;string m_name luffy; };int main() {Test t;t(我是要成为海贼王的男人);// 重载被执行Test tt;tt(19, luffy);// 类的函数指针funcptr f Test::world;// 可以让普通的函数指针指向类中的静态函数不能指向非静态函数// 给函数指针加上作用域就可以指向类中的非静态函数了using fptr void(Test::*)(int, string);fptr f1 Test::hello;// 可调用对象// 类的成员指针(变量)using ptr1 int Test::*;// 属于Test类中的指针ptr1 pt Test::m_id;// 可调用对象Test ttt;(ttt.*f1)(20, ace);// 前面加()的原因是*的优先级低于右侧的参数列表ttt.*pt 100;cout m_id ttt.m_id \n;return 0; }上述程序的输出结果为  C11通过提供std::function 和 std::bind统一了可调用对象的各种操作。  std::function是可调用对象的包装器。它是一个类模板可以容纳除了类成员函数指针之外的所有可调用对象。通过指定它的模板参数它可以用统一的方式处理函数、函数对象、函数指针并允许保存和延迟执行它们。 std::function必须要包含一个叫做functional的头文件可调用对象包装器使用语法如下: #include functional std::function返回值类型(参数类型列表) diy_name 可调用对象; 接下来演示可调用对象包装器的基本使用方法 #includeiostream #includefunctional using namespace std; /*1.是一个函数指针2.是一个具有operator()成员函数的类对象仿函数3.是一个可被转换为函数指针的类对象4.是一个类成员函数指针或者类成员指针 *///普通函数 void print(int num, string name) {cout id num name name \n; }using funcptr void(*)(int, string); //类 class Test { public:// 重载void operator()(string msg){cout 仿函数 msg \n;}// 将类对象转化为函数指针operator funcptr()// 后面的这个()不需要写任何参数{// 不能返回hello虽然hello的参数也是int和string// 但是hello在未示例化之前是不存在的world是属于类的return world;// 虽然在定义的时候没有返回值但是在函数体里面必须要返回实际的函数地址}void hello(int a, string s){cout number a name s \n;}static void world(int a, string s){cout number a name s \n;}int m_id 520;string m_name luffy; };int main() { #if 0Test t;t(我是要成为海贼王的男人);// 重载被执行Test tt;tt(19, luffy);// 类的函数指针funcptr f Test::world;// 可以让普通的函数指针指向类中的静态函数不能指向非静态函数// 给函数指针加上作用域就可以指向类中的非静态函数了using fptr void(Test::*)(int, string);fptr f1 Test::hello;// 可调用对象// 类的成员指针(变量)using ptr1 int Test::*;// 属于Test类中的指针ptr1 pt Test::m_id;// 可调用对象Test ttt;(ttt.*f1)(20, ace);// 前面加()的原因是*的优先级低于右侧的参数列表ttt.*pt 100;cout m_id ttt.m_id \n; #endif// 打包// C中的function主要用于包装可调用的实体// 也就是函数。这些可调用的实体包括普通函数、函数指针、成员函数、静态函数、// lambda表达式和函数对象。所以你可以认为std::function包装的都是函数。// 1.普通包装函数// 只是对print函数进行打包f1是不会被调用的若想f1中的函数体执行还需要额外的再次调用functionvoid(int, string) f1 print;// 2.包装类的静态函数functionvoid(int, string) f2 Test::world;// 3.包装仿函数Test ta;functionvoid(string) f3 ta;// 4.包装转化为函数指针的对象Test tb;functionvoid(int, string) f4 tb;// 调用f1(1, ace);f2(2, sabo);f3(luffy);f4(3, robin);return 0; }代码运行结果  通过测试代码可以得到结论std::function可以将可调用对象进行包装得到一个统一的格式包装完成得到的对象相当于一个函数指针和函数指针的使用方式相同通过包装器对象就可以完成对包装的函数的调用了。 function作为回调函数使用 因为回调函数本身就是通过函数指针实现的使用对象包装器可以取代函数指针的作用。 回调函数的基本概念和作用 在C中回调函数Callback Function是指一种通过函数指针或函数对象传递给其他函数的函数。这种机制允许你在某个事件发生或条件满足时通过调用指定的函数来实现定制的操作。 回调函数通常用于实现异步操作、事件处理、以及在框架或库中注册自定义行为。 回调函数的示例代码 #include iostream// 定义回调函数的原型 typedef void (*CallbackFunction)(int);// 接受回调函数作为参数的函数 void performOperation(int data, CallbackFunction callback) {// 执行某些操作std::cout Performing operation with data: data std::endl;// 调用回调函数callback(data); }// 示例回调函数 void callbackFunction(int data) {std::cout Callback function called with data: data std::endl; }int main() {// 使用回调函数调用 performOperationperformOperation(42, callbackFunction);return 0; }输出结果为 Performing operation with data: 42 Callback function called with data: 42解释一下输出结果 1. performOperation 函数被调用传递了参数 42然后输出了一条包含该数据的信息。 2. 在 performOperation 函数内部回调函数 callbackFunction 被调用将参数 42 传递给它。 3. callbackFunction 函数被执行输出了一条包含传递给它的数据的信息。 因此整体输出结果包括了两行信息一行是在执行 performOperation 时的信息另一行是在执行回调函数 callbackFunction 时的信息。这演示了回调函数的基本概念其中一个函数在特定事件或条件发生时调用另一个函数。 接下来是关于function作为回调函数的使用的代码 #includeiostream #includefunctional using namespace std; /*1.是一个函数指针2.是一个具有operator()成员函数的类对象仿函数3.是一个可被转换为函数指针的类对象4.是一个类成员函数指针或者类成员指针 *///普通函数 void print(int num, string name) {cout id num name name \n; }using funcptr void(*)(int, string); //类 class Test { public:// 重载void operator()(string msg){cout 仿函数 msg \n;}// 将类对象转化为函数指针operator funcptr()// 后面的这个()不需要写任何参数{// 不能返回hello虽然hello的参数也是int和string// 但是hello在未示例化之前是不存在的world是属于类的return world;// 虽然在定义的时候没有返回值但是在函数体里面必须要返回实际的函数地址}void hello(int a, string s){cout number a name s \n;}static void world(int a, string s){cout number a name s \n;}int m_id 520;string m_name luffy; };class A { public:// 构造函数参数是一个包装器对象// 这就意味着可以给这个构造函数传递四种类型的可调用对象// 传进来的可调用对象并没有直接使用而是存在callback中// 在实例化对象后调用notify函数相当于一个回调操作A(const functionvoid(int, string) f) : callback(f){}void notify(int id, string name){callback(id, name);// 调用通过构造函数得到函数指针}private:functionvoid(int, string) callback; };int main() { #if 0Test t;t(我是要成为海贼王的男人);// 重载被执行Test tt;tt(19, luffy);// 类的函数指针funcptr f Test::world;// 可以让普通的函数指针指向类中的静态函数不能指向非静态函数// 给函数指针加上作用域就可以指向类中的非静态函数了using fptr void(Test::*)(int, string);fptr f1 Test::hello;// 可调用对象// 类的成员指针(变量)using ptr1 int Test::*;// 属于Test类中的指针ptr1 pt Test::m_id;// 可调用对象Test ttt;(ttt.*f1)(20, ace);// 前面加()的原因是*的优先级低于右侧的参数列表ttt.*pt 100;cout m_id ttt.m_id \n; #endif// 打包// C中的function主要用于包装可调用的实体// 也就是函数。这些可调用的实体包括普通函数、函数指针、成员函数、静态函数、// lambda表达式和函数对象。所以你可以认为std::function包装的都是函数。// 1.普通包装函数// 只是对print函数进行打包f1是不会被调用的若想f1中的函数体执行还需要额外的再次调用functionvoid(int, string) f1 print;// 2.包装类的静态函数functionvoid(int, string) f2 Test::world;// 3.包装仿函数Test ta;functionvoid(string) f3 ta;// 4.包装转化为函数指针的对象Test tb;functionvoid(int, string) f4 tb;// 调用f1(1, ace);f2(2, sabo);f3(luffy);f4(3, robin);A aa(print);aa.notify(1, ace);A ab(Test::world);ab.notify(2, sabo);// 包装仿函数也可以传参这里不能是因为参数类型不一致// 这里包装仿函数的参数为(int, string)A ac(tb);ac.notify(3, luffy);return 0; } 上述代码的运行结果为  通过上面的例子可以看出使用对象包装器std::function可以非常方便的将仿函数转换为一个函数指针通过进行函数指针的传递在其他函数的合适的位置就可以调用这个包装好的仿函数了。 另外使用std::function作为函数的传入参数可以将定义方式不相同的可调用对象进行统一的传递这样大大增加了程序的灵活性。 本文参考可调用对象包装器、绑定器 | 爱编程的大丙 (subingwen.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站运营编辑做什么的东莞网站设计找谁

快速排序是计算机科学中最著名和广泛使用的排序算法之一。自1960年由英国计算机科学家托尼霍尔(Tony Hoare)发明以来,它以其高效率和简洁的实现而闻名。在本文中,我们将深入探讨快速排序的工作原理、其优缺点,并提供一…

深圳网页定做wordpress优化方法

jsf标签<p:ajax>今天&#xff0c;我们将看到一些使用JSF的Ajax简单样本。 如果要查看有关JSF / Web应用程序的其他文章&#xff0c;请单击以下链接&#xff1a; 重定向后的JSF持久化对象和消息 &#xff0c; 使用JAAS和JSF进行用户登录验证 &#xff0c; JSF&#xff1a;…

网站开发流程图苏州网站建设科技

排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19177 Accepted Submission(s): 7033 Problem Description今天的上机考试虽然有实时的Ranklist&#xff0c;但上面的排名只是根据完成的题数排序&#xf…

网上书店网站建设毕业设计顺徳网站建设公司有哪些

&#x1f4dc;作者&#xff1a;不想脱发的基兄 &#x1f4fa;专栏&#xff1a;《嵌入式面试》 &#x1f4e3;格言&#xff1a;不管前方的路有多苦&#xff0c;只要走的方向正确&#xff0c;不管多么崎岖不平&#xff0c;都比站在原地更接近幸福。 前言&#xff1a; 2022年秋招我…

自己怎样制作公司网站php企业网站源码

随着蓝牙技术的不断演进和发展&#xff0c;蓝牙已经从单一的传统蓝牙技术发展成集传统蓝牙。高速蓝牙和低耗能蓝牙于一体的综合技术&#xff0c;不同的应用标准更是超过40个越来越广的技术领域和越来越多的应用场景&#xff0c;使得目前的蓝牙技术成为包含传感器技术、识别技术…

江苏品牌网站建设电话wordpress小工具编辑器

Hadoop的介绍Hadoop最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎&#xff0c;包括网页抓取、索引、查询等功能&#xff0c;但随着抓取网页数量的增加&#xff0c;遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题. 2003年、2004年谷歌发表的两…

公司网站做推广支出分录涿州二康

原文出处http://bijian1013.iteye.com/blog/1895412 一.for update 和 for update nowait 的区别 首先一点&#xff0c;如果只是select 的话&#xff0c;Oracle是不会加任何锁的&#xff0c;也就是Oracle对 select 读到的数据不会有任何限制&#xff0c;虽然这时候有可能另外一…

怎样才能做一个手机网站做交互的设计网站

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 得到一个attachment.zip文件 解题思路&#xff1a; 1、解压attachment.zip&#xff0c;得到222.zip文件。尝试解压需要密码&#xff0c;使用Ziperello爆破密码…

大同泰瑞集团建设有限公司网站宁波seo关键词费用

在处理机器学习或深度学习问题时&#xff0c;损失/成本函数用于在训练期间优化模型。目标几乎总是最小化损失函数。损失越低&#xff0c;模型越好。交叉熵损失是最重要的成本函数。它用于优化分类。对交叉熵的理解取决于对 Softmax 激活函数的理解。 一、softmax激活函数 激活…

长沙营销型网站建设公司网站建设里怎么写文章

android版本&#xff1a;android-11.0.0_r21http://aospxref.com/android-11.0.0_r21 android手机的挂载非常复杂。这篇文章针对emulated存储&#xff0c;介绍它的挂载过程。 一、为什么emulted存储要用很复杂的挂载方式 1&#xff0c; emulted存储是什么 android早期&#…

秦皇岛做网站优化价格惠州建设局网站

目录 Flask MQTT 实现消息订阅发布准备开始1.创建Flask项目2创建py文件&#xff1a;mqtt_demo.py3.代码实现4.项目运行5.测试5.1 测试消息接收5.2 测试消息发布6、扩展 Flask MQTT 实现消息订阅发布 准备 本次项目主要使用到的库&#xff1a;flask_mqtt pip install flask…

自己做的网站本地虚拟上传可以做网站吗

os包中实现了平台无关的接口&#xff0c;设计向Unix风格&#xff0c;但是错误处理是go风格&#xff0c;当os包使用时&#xff0c;如果失败之后返回错误类型而不是错误数量&#xff0e;os包中函数设计方式和Unix类似&#xff0c;下面来看一下&#xff0e;func Chdir(dir string)…

高性能网站开发 书籍个人网站推广方法

并行运行hbase删表&#xff0c;建表操作&#xff0c;多个表多个region&#xff0c;导致hbase挂掉。查看日志&#xff1a;从日志中可以看出GC时间过长导致zookeeper连接超时&#xff0c;master退出。(是master退出而不是regionserver退出是因为进行的操作是建表&#xff0c;删表…

南坪网站建设马鞍山网站建设文

文章目录 &#x1f36a;一、前言&#x1f369;1、C简介&#x1f369;2、C关键字 &#x1f36a;二、命名冲突&#x1f36a;三、命名空间&#x1f369;1、命名空间定义&#x1f369;2、命名空间的使用 &#x1f36a;四、C输入&输出 &#x1f36a;一、前言 本篇文章是《C 初阶…

给别人做网站挣钱wordpress企业主题免费

参考网址:http://www.runoob.com/design-pattern/singleton-pattern.html 1.目的:保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。(比如世界只有一个月亮,党只有一个主席) 2. 优点&#xff1a; 1、在内存里只有一个实例&#xff0c;减少了内存的开销&#x…

建聊天网站深圳网站建设开发公司哪家好

为什么是B树&#xff1f; 我们推导下&#xff0c;首先看下用哈希表做索引&#xff0c;是否可以满足需求。如果我们用哈希建了索引&#xff0c;那么对于如下这种SQL&#xff0c;通过哈希&#xff0c;可以快速检索出数据&#xff1a; select * from t_user_info where id1;但是这…

大学跳蚤市场网站建设哈尔滨制作企业网站

最近在回顾网络知识点的时候&#xff0c;发现华为数通有关报文格式及网络协议地图神仙网站&#xff0c;这里涵盖了各个协议层及每个协议层对应的协议内容&#xff0c;最人性的化的一点是点击每个单独的协议可以跳转到该协议详细报文格式页面&#xff0c;有对应的说明和解释&…

淮安企业网站眉山网站建设公司

在当今世界&#xff0c;Windows 应用程序对我们的工作至关重要。随着处理 PDF 文档的需求不断增加&#xff0c;将 ComPDFKit PDF 查看和编辑功能集成到您的 Windows 应用程序或系统中&#xff0c;可以极大地为您的用户带来美妙的体验。 在本博客中&#xff0c;我们将首先探索集…

网站建设电子书永久免费crm软件哪个好

监控无人机的开发涉及多个方面&#xff0c;涵盖硬件、软件和网络等领域。下面是一般情况下开发监控无人机系统的主要步骤&#xff1a; 确定需求和功能&#xff1a;明确您的监控无人机系统的目标和应用场景&#xff0c;确定需要的功能和特性&#xff0c;例如实时视频监控、目标…

建设专业网站运营团队夜蝶直播app下载安装

许多业务流程要求在将来某个日期安排事件。例如&#xff0c;在与客户进行初次销售联系后&#xff0c;我们可能希望在将来的某个时间安排跟进电话。EasyNetQ可以通过其Future Publish功能帮助您实现此功能。例如&#xff0c;这里我们使用FuturePublish扩展方法来安排未来一个月的…