spdlog源码解析

基础抽象

sink
#level_t level_
+void log(const details::log_msg &msg)
+void flush()
+void set_pattern(const std::string &pattern)
+void set_formatter(std::unique_ptr sink_formatter)
+void set_level(level::level_enum log_level)
+level::level_enum level()
+bool should_log(level::level_enum msg_level)
formatter
+void format(const details::log_msg &msg, memory_buf_t &dest)
+std::unique_ptr clone()

其中sink中的log,flush,set_pattern,set_formatter为纯虚函数
formatter为虚类

base_sink

base_sink<Mutex>
#unique_ptr formatter_
#Mutex mutex_
#void sink_it_(const details::log_msg &msg)
#void flush_()
#void set_pattern_(const std::string &pattern)
#void set_formatter_(std::unique_ptr sink_formatter)
sink

base_sink模板类继承了sink,模板参数提供了同步机制。其实现了基类中的log,flush,set_pattern和set_formatter抽象方法,log方法中会调用抽象方法sink_it_,flush方法调用抽象方法flush_

template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::log(const details::log_msg &msg) {std::lock_guard<Mutex> lock(mutex_);sink_it_(msg);
}template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::flush() {std::lock_guard<Mutex> lock(mutex_);flush_();
}template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern(const std::string &pattern) {std::lock_guard<Mutex> lock(mutex_);set_pattern_(pattern);
}template <typename Mutex>
void SPDLOG_INLINE
spdlog::sinks::base_sink<Mutex>::set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) {std::lock_guard<Mutex> lock(mutex_);set_formatter_(std::move(sink_formatter));
}

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

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

相关文章

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…

HC-SR505人体感应灯

1硬件 1.1硬件组成 1.正点原子探索者开发板 2 HC-SR505迷你小型人体感应模块 3 继电器&#xff0b;5V小灯 HC-SR505迷你小型人体感应模块介绍 1.2 硬件连接 1.HC-SR505&#xff08;连接在PE0&#xff09; 2.继电器&#xff08;连接在PE1&#xff09; 2.主要代码 int ma…

【nerf】nvidia-smi

当cmd下nvidia -smi不能使用时候 沿着以下路径打开cmd&#xff0c;再输入&#xff0c;可以查看cuda版本 然后查看电脑安装的

【QT5】<总览五> QT多线程、TCP/UDP

文章目录 前言 一、QThread多线程 二、QT中的TCP编程 1. TCP简介 2. 服务端程序编写 3. 客户端程序编写 4. 服务端与客户端测试 三、QT中的UDP编程 1. UDP简介 2. UDP单播与广播程序 前言 承接【QT5】&#xff1c;总览四&#xff1e; QT常见绘图、图表及动画。若存在…

【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46, Leetcode 416

【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46&#xff0c; Leetcode 416 需强化知识点 背包理论知识 题目 卡码 46. 携带研究材料 01 背包理论基础01 背包理论基础&#xff08;滚动数组&#xff09;01 背包 二维版本&#xff1a;dp[i][j] 表示从下标为[0-i]的物…

二叉树—leetcode

前言 本篇博客我们来仔细说一下二叉树二叉树的一些OJ题目 请看完上一篇&#xff1a;数据结构-二叉树-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;LeetCode_普通young man的博客-CSDN博客 若有问题 评论区见&#x1f4dd; &…

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

实验三、拓扑布局和建立小型网络《计算机网络》

假期制定的各种计划但凡实施了一点&#xff0c;也不至于一点都没有实施。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1. 正确识别网络中使用的电缆线&#xff1b; 2. 为点对点网络和交换网络实施物理布线&#xff1b; 3. 验证每个网络的基本连通性。…

音视频转为文字SuperVoiceToText

音视频转为文字SuperVoiceToText&#xff0c;它能够把视频或语音文件高效地转换为文字&#xff0c;它是基于最为先进的 AI 大模型&#xff0c;通过在海量语音资料上进行训练学习而造就&#xff0c;具备极为卓越的识别准确率。 不仅如此&#xff0c;它支持包括汉语、英语、日语…

Java数据结构准备工作---常用类

文章目录 前言1.包装类1.1.包装类基本知识1.2.包装类的用途1.3.装箱和拆箱1.3.1.装箱&#xff1a;1.3.2.拆箱 1.4 包装类的缓存问题 2.时间处理类2.1.Date 时间类(java.util.Date)2.2.DateFormat 类和 SimpleDateFormat 类2.3.Calendar 日历类 3.其他常用类3.1.Math类3.2.Rando…

Diffusers代码学习: T2I Adapter

T2I Adapter是一款轻量级适配器&#xff0c;用于控制文本到图像模型并为其提供更准确的结构指导。它通过学习文本到图像模型的内部知识与外部控制信号&#xff08;如边缘检测或深度估计&#xff09;之间的对齐来工作。 T2I Adapter的设计很简单&#xff0c;条件被传递到四个特征…

前端使用轮播图的方法有哪些

前端使用轮播图的方法可以使用swiper:Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 这是swiper官网,在官网里面可以找到很多轮播图的实际案例: 我们挑选可用的案例或者修改的案例,打开后打开源码,就可以获取到当前的源码了,加以调试就可以获得我们需要的结果, 例如: 上图…

【Redis】Redis分布式锁的基本原理和具体实现

Redis 分布式锁是一种在分布式系统中使用 Redis 实现的锁机制&#xff0c;用于确保多个进程或线程在某个时间段内只有一个能够访问共享资源。它可以用于解决分布式环境下的并发问题。下面详细介绍 Redis 分布式锁的实现方法&#xff0c;包括其基本原理和具体实现。 基本原理 …

vue3模板语法总结

1. 响应式数据 Vue 3中的数据是响应式的&#xff0c;即当数据发生变化时&#xff0c;视图会自动更新。这是通过使用JavaScript的getter和setter来实现的。 2. 组件化 Vue 3采用组件化开发方式&#xff0c;允许创建可复用的组件。 每个组件都有自己的作用域&#xff0c;并且…

KEIL5如何打开KEIL4的GD工程

GD官方提供的很多KEIL例程为KIEL4的版本&#xff0c;读者使用的时候可能会碰到使用KEIL5打开KEIL4的工程会报错以及无法找到芯片选型的问题&#xff0c;具体表现如下图所示。 我们该怎么办呢&#xff1f; 下面为大家介绍两种方法&#xff1a; 第一种方法是在keil4的工程后缀u…

C# Math.Round() 四舍六入五取偶

文章目录 1.重载列表2. 示例 Math.Round() 为四舍六入五取偶 1.重载列表 API说明Round(Double)将小数值舍入到最近的整数值Round(Double, Int32)将小数值按指定的小数位数舍入Round(Double, Int32, MidpointRounding)将小数值按指定的小数位数舍入&#xff0c;MidpointRoundin…

基于不确定性的相互学习 用于联合医学图像分类和分割

文章目录 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation摘要方法实验结果 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation 摘要 该论文提出了一种基于不确定性的相互学习…

《Linux运维总结:常用操作系统下载地址》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、系统下载 操作系统 x86_64 arm64 Centos 7.6.1810- Centos 7.9.2009- Centos 8-stream 8-stream Ubuntu x86_64 arm64 ope…

React antd 怎么封装枚举字典组件

在 React 中使用 Ant Design (antd) 封装枚举字典组件可以帮助你更方便地管理和使用枚举值。枚举字典通常用于将数据库中的数字或字符串代码映射为人类可读的标签或描述。 以下是一个简单的步骤和示例,说明如何封装一个枚举字典组件: 步骤 定义枚举字典数据:首先,你需要定…

eNSP学习——RIP故障处理

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、导入设备预配置 2、排除R1与R2间的故障 3、排除R1与R3间的故障 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版_ensp配置命令大全资源-CSDN文库 主要命令 //检查…