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

做五金建材市场的网站wordpress英文别名

做五金建材市场的网站,wordpress英文别名,直通车代运营,天河建设网站外包目录 1.自定义异常类spdlog_ex 1.1.通用异常 1.2.系统调用异常 1.3.what()函数 2.异常的使用 2.1.抛出异常 2.2.控制异常使用 1.自定义异常类spdlog_ex 标准库异常类#xff08;std::exception#xff09;系列#xff0c;能满足大多数使用异常的场景#xff0c;但对…目录 1.自定义异常类spdlog_ex 1.1.通用异常 1.2.系统调用异常 1.3.what()函数 2.异常的使用 2.1.抛出异常 2.2.控制异常使用 1.自定义异常类spdlog_ex 标准库异常类std::exception系列能满足大多数使用异常的场景但对系统调用异常及错误信息缺乏支持。spdlog通过继承std::exception扩展对系统调用的支持实现自定义异常类spdlog_ex。 spdlog_ex类声明很简单在std::exception基础上添加了string类型的msg_成员提供支持errno的构造函数。 // include/spdlog/details/common.h// Log exception class SPDLOG_API spdlog_ex : public std::exception { public:explicit spdlog_ex(std::string msg);spdlog_ex(const std::string msg, int last_errno); // 提供系统调用错误号errno的支持const char *what() const SPDLOG_NOEXCEPT override; private:std::string msg_; // 异常文本信息 }; 1.1.通用异常 对于通用的异常spdlog_ex并未做什么特别的事情只是将用户传入的异常提示信息存放到msg_。 SPDLOG_INLINE spdlog_ex::spdlog_ex(std::string msg): msg_(std::move(msg)) {} 1.2.系统调用异常 spdlog_ex对errno的支持主要是将errno转换为对应错误文本信息存放到msg_字符串中。spdlog使用的是ftm库提供的format_system_error来完成转换工作出于对memory_buf_t支持。当然也可以使用C库函数strerror或者线程安全版本strerror_r。 SPDLOG_INLINE spdlog_ex::spdlog_ex(const std::string msg, int last_errno) { #ifdef SPDLOG_USE_STD_FORMATmsg_ std::system_error(std::error_code(last_errno, std::generic_category()), msg).what(); #elsememory_buf_t outbuf;fmt::format_system_error(outbuf, last_errno, msg.c_str());msg_ fmt::to_string(outbuf); #endif } 1.3.what()函数 what()是基类std::exception定义的virtual函数用户通常通过该接口获取异常信息。spdlog_ex也是简单的返回存放异常信息的msg_。 SPDLOG_INLINE const char *spdlog_ex::what() const SPDLOG_NOEXCEPT {return msg_.c_str(); } 2.异常的使用 2.1.抛出异常 前面是讲如何实现spdlog_ex但如何在spdlog中抛出一个异常对象呢直接调用throw spdlog_ex(..) spdlog提供了重载函数形式的接口throw_spdlog_ex。 SPDLOG_INLINE void throw_spdlog_ex(const std::string msg, int last_errno) {SPDLOG_THROW(spdlog_ex(msg, last_errno)); }SPDLOG_INLINE void throw_spdlog_ex(std::string msg) {SPDLOG_THROW(spdlog_ex(std::move(msg))); } throw_spdlog_ex本质上也是throw spdlog_ex(..)为何要通过一个宏定义SPDLOG_THROW来进行呢 这就涉及到下面要讲的控制异常使用。 2.2.控制异常使用 有些APP并不希望第三方库抛出异常而有些无所谓。为此spdlog提供两种模式抛出异常不抛出异常通过宏定义SPDLOG_NO_EXCEPTIONS来控制。 当没有定义宏SPDLOG_NO_EXCEPTIONS时正常抛出异常对象 当定义了宏SPDLOG_NO_EXCEPTIONS时抛出异常替换为直接终止程序abort #ifdef SPDLOG_NO_EXCEPTIONS # define SPDLOG_TRY # define SPDLOG_THROW(ex) \do \{ \printf(spdlog fatal error: %s\n, ex.what()); \std::abort(); \} while (0) # define SPDLOG_CATCH_STD #else # define SPDLOG_TRY try # define SPDLOG_THROW(ex) throw(ex) # define SPDLOG_CATCH_STD \catch (const std::exception ) {} #endif 通过这种方式spdlog异常处理更加灵活更好适配APP对是否抛出异常的需求。 因此在spdlog中捕获异常的代码块try-catch看起来会是这样 // message all threads to terminate gracefully join them SPDLOG_INLINE thread_pool::~thread_pool() {SPDLOG_TRY{for (size_t i 0; i threads_.size(); i){post_async_msg_(async_msg(async_msg_type::terminate), async_overflow_policy::block);}for (auto t : threads_){t.join();}}SPDLOG_CATCH_STD } 当然也可以使用自定义捕获catch代码块替换SPDLOG_CATCH_STD看起来会是这样 SPDLOG_INLINE void spdlog::async_logger::backend_flush_() {for (auto sink : sinks_){SPDLOG_TRY{sink-flush();}SPDLOG_LOGGER_CATCH(source_loc())} }#ifndef SPDLOG_NO_EXCEPTIONS # define SPDLOG_LOGGER_CATCH(location) \catch (const std::exception ex) \{ \if (location.filename) \{ \err_handler_(fmt_lib::format(SPDLOG_FMT_STRING({} [{}({})]), ex.what(), location.filename, location.line)); \} \else \{ \err_handler_(ex.what()); \} \} \catch (...) \{ \err_handler_(Rethrowing unknown exception in logger); \throw; \} #else # define SPDLOG_LOGGER_CATCH(location) #endif
http://www.hkea.cn/news/14499282/

相关文章:

  • 做网站是用源码还是模版手机网站是怎么做的
  • 佛山网站设计实力乐云seo丹麦做网站公司有哪些
  • 网站结构怎么做适合优化深圳网页制作培训班
  • wang域名建的网站345诛仙网站是谁做的
  • 公司网站模板图片seo的范畴是什么
  • 手机网站源代码wordpress rss采集插件
  • 重庆网站备案在那里淄博网站建设公司有多少家
  • 正能量网站地址链接免费盘多多网盘搜索
  • 网站 网址 域名旅游网站页面设计
  • 网站开发技术项目辽宁建设工程信息网上开标流程
  • 邢台住房与城乡建设部网站企业应对承包商的施工方案尤其是
  • 网站网页建设与制作怎么做账网站开发招投标书
  • 公司网站内容如何做做网站数据库表设计
  • 请人做网站卖东西好吗曹县建设局网站
  • 杭州市上城区建设局网站北京网站定制设计开发公司
  • 北京网站开发招聘做图网站
  • 深圳比较好的网站建设公司苏州晶体公司网站建设
  • 网站费用多少昆明网站建设公司排行
  • 公司集团网站建设北京感染人数最新消息
  • 电子兼职网站建设网站建设相关的
  • 网站开发制作学徒婚礼工作室网站模板
  • 网站开发需要哪些知识和工具wordpress安装的模板文件
  • 桂市做网站的朋友东方城乡与住房建设部网站
  • 免费空间访客网站网站设计公司西安
  • 余姚外贸网站建设网站首页改版费用
  • 网站规划的步骤企业网站目的
  • 做的网站访问速度慢广告设计与制作专业就业方向
  • 岳阳网站岳阳建站常用网站推荐
  • 上海站优云网络科技有限公司完成网站的建设工作内容
  • 有个印度做网站的天天找我男生做网站编辑