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

58重庆网站建设中国联通和腾讯

58重庆网站建设,中国联通和腾讯,怎样是做网站,泉州做网站优化1 概述 回调函数是一种编程模式,指的是将一个函数作为参数传递给另一个函数,并在某个特定事件发生时或满足某些条件时由该函数调用。这种机制允许你定义在特定事件发生时应执行的代码,从而实现更灵活和模块化的程序设计。 2 传统C/C回调实现…

1 概述

  • 回调函数是一种编程模式,指的是将一个函数作为参数传递给另一个函数,并在某个特定事件发生时或满足某些条件时由该函数调用。
  • 这种机制允许你定义在特定事件发生时应执行的代码,从而实现更灵活和模块化的程序设计。

2 传统C/C++回调实现方式

  • 传统C/C++实现回调,主要通过函数指针来实现。
  • 有这样一个场景,某业务系统需要检测环境温度,当温度大于50度时进行告警,告警接口就可以作为回调函数,在温度大于50度时调用。这里通过随机生成一个温度值,模式现实场景。
  • 示例
    •   #include <iostream>#include <stdlib.h>#include <time.h>// 定义函数指针typedef void(*pCb)(int);void BusProcess(int tempera, pCb cb) {printf("开始业务\n");printf("业务处理中\n");// 处理业务过程中,如果温度值大于50摄氏度,则调用告警接口进行告警if (tempera > 50) {cb(tempera);}printf("结束业务\n");}// 定义回调函数void temWarning(int tempera) {printf("温度值为: %d 已超阈值,告警 ...\n", tempera);}int main() {{srand(time(NULL));  // 随机生成温度值int tempera = rand() % 100;// 开启业务BusProcess(tempera, temWarning);}system("pause");return 0;}
      
  • 打印结果
    •   开始业务业务处理中温度值为: 65 已超阈值,告警 ...结束业务请按任意键继续. . .
      

3 C++11提供的回调新实现方式

  • 介绍C++11实现回调前先介绍C++11提供的两个新接口std::functionstd::bind

3.1 std::function

  • std::function是一个通用的函数包装器,可以存储任何可调用对象,包括普通函数、类成员函数、仿函数、Lambda表示式。
  • 基本语法
    •   #include <functional>std::function<返回值类型(参数类型列表)> 函数对象;
      
  • 示例
    •   #include <iostream>#include <functional>// 普通函数int add(int a, int b) {return a + b;}class Multiply {public:int operator()(int a, int b) {return a * b;}};int main() {// 存储普通函数std::function<int(int, int)> func1 = add;std::cout << "func1 result: " << func1(3, 4) << std::endl;// 存储 Lambda 表达式std::function<int(int, int)> func2 = [](int a, int b) { return a - b; };std::cout << "func2 result: " << func2(10, 3) << std::endl;// 存储函数对象Multiply multiply;std::function<int(int, int)> func3 = multiply;std::cout << "func3 result: " << func3(5, 6) << std::endl;return 0;}
      

3.2 std::bind

  • std::bind是一个函数模板,用于将函数或成员函数与其参数绑定,生成一个新的可调用对象。
  • 基本语法
    •   // 绑定非类成员函数/变量auto f = std::bind(可调用对象地址, 绑定的参数/占位符);// 绑定类成员函/变量auto f = std::bind(类函数/成员地址, 类实例对象地址, 绑定的参数/占位符);
      
  • 示例
    •   #include <iostream>#include <functional>int add(int a, int b) {return a + b;}class MyClass {public:int multiply(int a, int b) {return a * b;}};int main() {// 绑定普通函数auto boundAdd = std::bind(add, std::placeholders::_1, std::placeholders::_2);std::cout << "Result: " << boundAdd(5, 10) << std::endl; // 输出 15MyClass obj;// 绑定类成员函数auto boundMultiply = std::bind(&MyClass::multiply, &obj, std::placeholders::_1, std::placeholders::_2);std::cout << "Result: " << boundMultiply(3, 4) << std::endl; // 输出 12system("pause");return 0;}
      

3.3 C++11实现回调

  • 介绍完std::functionstd::bind再看下如何使用C++11语法实现回调。

  • 回调函数为普通函数时示例

    •   #include <iostream>#include <stdlib.h>#include <time.h>#include <functional>void BusProcess(int tempera, std::function<void(int)> op) {printf("开始业务\n");printf("业务处理中\n");// 处理业务过程中,如果温度值大于50摄氏度,则调用告警接口进行告警if (tempera > 50) {op(tempera);}printf("结束业务\n");}void temWarning(int tempera) {printf("温度值为: %d 已超阈值,告警 ...\n", tempera);}int main() {{srand(time(NULL));  // 随机生成温度值int tempera = rand() % 100;// 开启业务,调用对象为普通函数BusProcess(tempera, temWarning);}system("pause");return 0;}
      
  • 打印结果

    •   开始业务业务处理中温度值为: 56 已超阈值,告警 ...结束业务请按任意键继续. . .
      
  • 回调函数为类成员对象、函数对象、Lambda时示例

    •   #include <iostream>#include <stdlib.h>#include <time.h>#include <functional>void BusProcess(int tempera, std::function<void(int)> op) {printf("开始业务\n");printf("业务处理中\n");// 处理业务过程中,如果温度值大于50摄氏度,则调用告警接口进行告警if (tempera > 50) {op(tempera);}printf("结束业务\n");}class MyWarn {public:void startWarning(int tempera) {printf("温度值为: %d 已超阈值,告警 ...\n", tempera);}void operator()(int tempera) {printf("operator() 温度值为: %d 已超阈值,告警 ...\n", tempera);}};int main() {{srand(time(NULL));// 随机生成温度值int tempera = rand() % 100;MyWarn mwarn;std::function<void(int)> fc = std::bind(&MyWarn::startWarning, &mwarn, std::placeholders::_1);// 调用对象为类成员函数BusProcess(tempera, fc);MyWarn mwarn2;std::function<void(int)> fc2 = mwarn2;// 调用对象为仿函数BusProcess(tempera, fc2);// 调用对象为Lambda表达式BusProcess(tempera, [](int te) {printf("Lambda 温度值为: %d 已超阈值,告警 ...\n", te);});}system("pause");return 0;}
      
  • 打印结果

    •   开始业务业务处理中温度值为: 66 已超阈值,告警 ...结束业务开始业务业务处理中operator() 温度值为: 66 已超阈值,告警 ...结束业务开始业务业务处理中Lambda 温度值为: 66 已超阈值,告警 ...结束业务请按任意键继续. . .
      
  • class MyWarn {public:void startWarning(int tempera) {printf("温度值为: %d 已超阈值,告警 ...\n", tempera);}};#include <iostream>#include <string>#include <vector>#include <stdlib.h>#include <time.h>#include <functional>class myPersion {public:myPersion(): mCode(1001), mName("Jack") {}void setCode(int code) {std::cout << "code: " << code << std::endl;mCode = code;}private:int mCode;std::string mName;};typedef void(*pCb)(int);void optFunc(int data, pCb cb) {printf("optFunc ...\n");if (data % 2 == 0) {cb(data);}}void optFunc2(int data, std::function<void(int)> op) {printf("optFunc2 ...\n");if (data % 2 == 0) {op(data);}}void onHandle(int data) {printf("onHandle ...\n");}int main() {{srand(time(NULL));  // 初始化随机数生成器int radNum = rand() % 100;printf("radNum: %d\n", radNum);optFunc(radNum, onHandle);myPersion mp;//optFunc(1001, &mp.setCode);}{srand(time(NULL));  // 初始化随机数生成器int radNum = rand() % 100;printf("radNum: %d\n", radNum);optFunc2(radNum, onHandle);optFunc2(radNum, [](int x) {printf("lam ...\n");});myPersion mp;std::function<void(int)> fc = std::bind(&myPersion::setCode, &mp, std::placeholders::_1);optFunc2(10010, fc);}system("pause");return 0;}
    
http://www.dtcms.com/wzjs/203235.html

相关文章:

  • asp.net网站支持多国语言河南自助建站seo公司
  • 淮安神舟建设招标网站新闻头条今日要闻国内新闻最新
  • 中山网站上排名深圳债务优化公司
  • 网站的营销百度关键词seo外包
  • 公司如何做网站建设关键词seo排名怎么样
  • 贵州省建设厅官方网站考证爱站网长尾关键词挖掘查询工具
  • wordpress网站代码优化seo网络优化是做什么的
  • 邢台企业网站制作建设什么叫口碑营销
  • wordpress比价插件湖南优化公司
  • 政府网站的建设方案搜索引擎优化名词解释
  • asp网站制作设计教程专业软文
  • 可靠的镇江网站建设杭州seo技术培训
  • 以个人名义可以做网站吗seo技术优化整站
  • 1688网站怎么样seo优化流程
  • 做刷网站怎么赚钱推广业务
  • 十大热点新闻排名优化公司哪家效果好
  • wordpress ishomeseo去哪里学
  • 怎样自己做商场网站网站如何快速推广
  • 网络培训内容广东seo推广费用
  • 上海做响应式网站的公司河南制作网站公司
  • 怎么做网站开始动画济南网络推广
  • 中英文切换网站模板湖南靠谱的关键词优化
  • 南京网页制作培训天津短视频seo
  • 网站建设费用包括兰州网络推广关键词优化
  • 开鲁seo网站什么是百度推广
  • 建设网站哪个好百度竞价推广培训
  • 爱星光(istar)高端网站建设推广普通话手抄报内容资料
  • 网站的图片大小规定重庆网站建设维护
  • 设计公司资质等级四川网站seo
  • 网站用excel做数据库吗公司广告推广