C++_ 模板学习八
std::variant 与 std::visit 概述 std::variant 是 C++17 标准库提供的类型安全联合体 variant 解决什么问题 假设服务器收到的消息可能是 任意时刻,一条消息只会是其中一种 传统做法是手工组合枚举和 union 问题在于: 必须手动记...
std::variant 与 std::visit 概述 std::variant 是 C++17 标准库提供的类型安全联合体 variant 解决什么问题 假设服务器收到的消息可能是 任意时刻,一条消息只会是其中一种 传统做法是手工组合枚举和 union 问题在于: 必须手动记...
模板 概述 C++模板是一个强大的编程工具,使得可以编写通用的、类型安全的代码 模板主要用于函数和类的泛型编程,允许你定义通用算法和数据结构,然后在需要时使用具体类型进行实例化 使用场景 通用算法: 模板允许你编写通用算法,如排序、搜索等,而无需针对每种类型重复实现 容器类: 标...
模板错误与调试 概述 模板报错之所以经常出现几百行,不是因为真正存在几百个错误,而是因为编译器必须告诉你: 最外层调用了哪个模板 它实例化了哪个内部模板 内部模板又实例化了什么 最终哪个表达式不合法 最小示例 下面代码不能编译 模板代码什么时候被检查 模板通常经历以下阶段: 阶段...
概述 首先,stack是一个容器适配器 理论上,任何提供了 push_back(), pop_back(), back()等操作的序列容器都可以作为 stack的底层容器 为什么默认是deque deque之所以成为默认选择,是因为它在以下几个方面取得了最佳平衡: 相对于vect...
模板定制体系 概述 大型模板库必须解决一个核心问题 库作者写好了通用算法,但怎样允许用户为自己的类型提供特殊行为 C++ 中没有唯一的定制机制,而是形成了一组工具 机制 最适合表达 traits 这个类型具有什么静态信息 policy 这个组件采用哪一种行为策略 tag disp...
同步 I/O:服务端 code 同步 I/O:客户端 code 异步I/O:服务端 code 异步I/O:客户端 code 定时器 code 线程池 code strand 概述 io_context::run() 可以被多个线程同时调用(线程池模式)。这时候多个 handler...
大型模板源码阅读 概述 阅读大型模板项目时,最容易犯的错误是 从公共 API 跳进第一个模板定义,然后试图把所有分支、所有类型和所有平台代码全部看懂 正确方法是先固定一个具体调用,只追踪它实际经过的路径 我们只关心: 这个调用中每个模板参数是什么 最终选中了哪个重载 哪些对象被复...
函数模板与实例化 模板是什么 普通函数只能处理声明好的类型 如果还要处理 double、std::string,不使用模板就需要重复编写 模板的作用是 描述一组具有相同结构、但类型不同的函数 这段代码本身不是一个普通函数,而是一个函数模板,也可以理解为编译器生成函数的“配方” 模...
搜索当前标签