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

泰安企业建站公司流程wordpress视频播放器代码

泰安企业建站公司流程,wordpress视频播放器代码,高端网站建设南京,简约网站首页上篇文章《静态库和链接选项--whole-archive》提到--whole-archive的一个应用场景#xff1a;C自动注册的工厂#xff0c;这篇文章来填坑。 预备知识 我们经常用工厂类或工厂方法统一管理资源#xff0c;实现资源的创建和使用之间的解耦#xff0c;调用者无需关心资源创建的… 上篇文章《静态库和链接选项--whole-archive》提到--whole-archive的一个应用场景C自动注册的工厂这篇文章来填坑。 预备知识 我们经常用工厂类或工厂方法统一管理资源实现资源的创建和使用之间的解耦调用者无需关心资源创建的细节直接到工厂申请创建好的资源即可。 一般情况下资源提供了统一的接口供使用者调用到工厂的获取也采用统一的方式极大地简化了编码尤其是资源创建比较繁冗的情况下。而且资源统一管理也从某种程度上节省了资源的重复创建带来的开销。 下面是典型的工厂函数的实现 using MsgHandler  std::functionbool(std::string_view msg_data);MsgHandler*  create_msg_handler(std::string_view msg_type) {if (msg_type  account) {return http_handle;}else if (msg_type  pay) {return json_handle;}...else {return nullptr;}  } 这个函数根据不同的消息类型返回对应的消息处理器基本实现了工厂的注册功能。 我们看下这种实现的问题。假设新增一种消息处理器我们需要添加一个if语句然后返回对应的handler看似问题不大。但只要有修改就会容易出错甚至不经意的触碰到键盘的一个键都会引入一个bug这种情况真遇到过所以我们的原则应该是尽量不要动已有的代码要从代码结构的扩展性上下手。 自动注册的工厂模式可以解决这个问题。 自动注册的工厂模式 . ├── msg_handler.cpp ├── msg_handler.h ├── pay_handler.cpp ├── CMakeLists.txt └── main.cpp 其中msg_handler.[cpp|h]实现工厂pay_handler.cpp提供了pay类型消息的处理器main.cpp演示了消息处理器的使用。 // msg_handler.h #include functional #include string_viewusing MsgHandler  std::functionbool(std::string_view msg_data);// 注册消息处理器  void  register_msg_handler(const char *msg_type, MsgHandler handler);// 获取指定消息类型的处理器 MsgHandler*  get_msg_handler(const char *msg_type);// msg_handler.cpp #include map #include string#include msg_handler.hstatic std::mapstd::string, MsgHandler  get_map() {static std::mapstd::string, MsgHandler map_handlers;return map_handlers; }void  register_msg_handler(const char *msg_type, MsgHandler handler) {get_map()[msg_type]  handler; }MsgHandler*  get_msg_handler(const char *msg_type) {auto m  get_map();auto it  m.find(msg_type);if (it ! m.end()) {return it-second;}else {return nullptr;} } msg_handler实现了简单的工厂调用register_msg_handler注册处理器使用方调用get_msg_handler获取消息处理器。工厂内部使用map存储k为消息类型v为消息处理器。注意map_handlers为函数内部的静态变量之所以这么做主要是给这个静态变量确定的初始化顺序首次调用get_map时初始化保证在注册的时候map_handlers一定是可用的。 下面是pay_handler.cpp文件实现了pay类型的消息处理及自动注册。 #include msg_handler.h #include stdio.hclass PayHandler {public:PayHandler() { register_msg_handler(pay, PayHandler::handle);}static bool handle(std::string_view msg_data) {printf(pay handle\n);return true;} };static PayHandler pay_handler; 实现自动注册的逻辑分两步 PayHandler构造函数实现消息处理器的注册声明一个文件作用域的变量初始化时自动调用构造函数从而实现了自动注册。 pay_handler采用全局变量也是可以的这里加了static主要为了避免这个变量作用域过大被滥用。 下面是主流程的实现main.cpp #include msg_handler.h #include stdio.hint main() {MsgHandler* handle  get_msg_handler(pay);if (handle) {(*handle)(test data);}else {printf(not found\n);}return 0; } 程序正常运行会输出pay handle大家可以先试着编译运行下看看输出结果。 编译运行 如果没有把pay_handler源代码的目标文件链接到可执行文件会输出not found因为工厂里没有找到对应的handler。 大概率编译的指令跟下面的大同小异这里只是简单的使用了-l链接libpayhandler静态库然而链接器最终会优化掉因为通过main.cpp链接器仅能判断出依赖libmsghandler库。 $ g -c msg_handler.cpp $ g -c pay_handler.cpp $ ar rcs libmsghandler.a msg_handler.o $ ar rcs libpayhandler.a pay_handler.o $ g main.cpp -L. -lpayhandler -lmsghandler -o main $ ./main not found 这种情况需要使用--whole-archive选项强制将库链接进可执行文件修改为 g main.cpp -L. \-Wl,--whole-archive -lpayhandler \-Wl,--no-whole-archive \-lmsghandler -o main 在这个例子里--whole-archive是必需的我们无法像上篇文章那样简单的调整一下main.cpp和静态库的位置解决问题貌似也没其他方法了。 附上对应的CMakeLists.txt文件 cmake_minimum_required (VERSION 3.24.0) project(main)add_library(payhandler STATIC pay_handler.cpp) add_library(msghandler STATIC msg_handler.cpp)add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME}msghandler$LINK_LIBRARY:WHOLE_ARCHIVE,payhandler )
http://www.huolong8.cn/news/392433/

相关文章:

  • 太原市建设厅网站首页东莞营销策划推广公司
  • 网站建设福建摄影网站免费
  • 清徐网站建设郑州市建设集团
  • 值得相信的西安网站开发南京做网站公司 雷仁
  • 建设银行网站为什么进不去上海有几个区最好
  • 国外的ui设计思想网站昌吉做网站需要多少钱
  • 网站开发职业要求站外推广营销方案
  • 合肥企业网站建3d打印 东莞网站建设
  • 怒江北京网站建设评价高的企业网站开发
  • 用wordpress建的网站网站大量死链
  • 西充县企业网站建设wordpress 默认主题站点
  • 网站分享对联广告陕西省建设网官网首页
  • 网页设计与制作个人网站wordpress 百度广告
  • 北京网站建设小程序开发衡东网页设计
  • 优化网站排名方法教程国外用wordpress
  • 学校网站建设策划书模板山东建设厅网站是什么
  • 动漫网站在线免费观看网页设计与制作实用教程电子资源
  • 网站设计技术大全象山做网站
  • unas做网站服务器哪里有最新的网站源码
  • 微信网站开场动画网站免费制作教程
  • 自己做的网站显示不安全怎么回事如何制作小程序商城
  • 购物网站开发意义青岛市黄岛区城市建设局网站
  • 公司网站与推广全球做网站的公司排名
  • 如何选择做网站的公司平面设计素材图库
  • 自做网站视频网站内容百度不收录
  • 网站运营是做什么的怎么样微信视频制作小程序
  • 网站做虚假广告wordpress官网地址
  • 哪个网站做初中英语试题赚钱做英文网站需要哪些东西
  • 发布新闻最快的网站免费做做网站
  • wdcp网站备份中国最大的网站排名