如何展开可变参数模板的参数包
C++11 引入可变参数模板(variadic template),可以接受任意数量的模板参数,这对模板的用法是一个很大的改进。然而,可变参数模板的使用也很复杂,在 C++11 中,模板参数包不能直接展开,需要使用递归或者逗号表达式的方式展开,写法比较繁琐。C++17 引入了折叠表达式的语法,用来对可变参数模板中的参数做展开。 本文介绍与之相关的内容,方便有需要的读者在自己的项目中实践可变参数模板特性。 基础什么是可变参数模板模板参数列表可变的模板,如下示例: 1234// 常规模板template<typename T> void f(T arg);// 可变参数模板tem...
hexo butterfly 主题插件
说明本博文为笔记性质的内容,全部内容来自于网络,有一些是官方描述,也有一些个人博客上的内容,另外我会把自己操作过程中遇到的问题记下来。如果涉及到版权信息,请联系我删除。 本文汇总了我的博客中用到的(或者曾经用到的)hexo butterfly 主题插件。 NPM 使用使用以下命令来管理插件: 1234567891011# 列出所有插件npm list# 安装插件到博客目录npm install xxxx# 更新插件npm update xxxx# 移除插件npm remove xxxx Hexo 相关的插件 hexo-server:Hexo 的服务器模块 hexo-generator-...
Chapter.413
雨幕下的城市印象
Chapter.445
追求自己所满足的生活状态,本身就成为了生活的意义
Chapter.337
在飞逝的时光中,他们让未来有所期待
扑克昆特牌玩法设计
开头叨叨这篇文章中,我将会介绍如何用扑克牌(一定程度上)复刻传统昆特牌游戏的玩法。其中会涉及到分析昆特牌游戏为什么如此受玩家欢迎的原因,《巫师 3:狂猎》又被称为 “昆特 3” 是有一定道理的 🐶 通过使用扑克牌复刻昆特牌游戏玩法,可以把昆特牌搬到线下和朋友一起玩,之所以不购买或自制现成的昆特牌桌游套件,是因为扑克牌更容易拿到,而且扑克牌玩昆特牌绕开了一些不重要而且浪费时间的话题讨论中(比如希瑞雅的战力应该给多少)。 在设计这套玩法之前,我玩了很久的昆特牌及其衍生作品,也研究了昆特牌模组的改进,吸取了其他网友的一些灵感。如果你对这个话题感兴趣,欢迎,我的朋友 👏 昆特牌介绍本文所提到...
处理器 barrier 行为的仿真实现
开头叨叨由于编译器指令重排以及 CPU 乱序执行的问题,处理器指令有可能在多线程执行时遇到一些问题,比如数据竞争,死锁,非预期的计算结果等。为了避免这类潜在的问题,引入了 barrier 的概念。编译器会主动插入 barrier 指令来降低直接调整指令调度环节的复杂性,而硬件的非预期行为也只能通过软件强行做同步来避免。 在处理器架构领域,barrier 是一种同步行为,它通常是指令或者指令 modifier,用来对程序流进行同步控制。在多处理器或多线程处理器中,当不同的程序流遇到 barrier 时,会等待其他程序流同时到达这个同步点,然后再执行后边的程序。 这种方式确保了所有的线程或处...
LLVM 风格的 RTTI
开头叨叨众所周知,LLVM project 没有开启 C++ 的 RTTI 特性。一个主要的原因是 LLVM project 认为 C++ RTTI 特性的实现需要使用到虚函数表,对性能并不友好。LLVM 自己实现了一种类似 RTTI 的行为。我们在开发 LLVM 代码时,尤其是需要自己搭建自定义的数据结构时,可能会想用到 RTTI,此时,学习在 LLVM 风格下如何创建类似的 API,就显得尤为重要。 什么是 RTTI难度:⭐ RTTI 是运行时类型识别,全称 Runtime Type Identification,网上有很多介绍这个的资料,属于 C++ 程序员必须要熟悉的内容。 它的...
为什么终端开发离不开 Tmux
开头叨叨我在每天的软件开发工作中都离不开 tmux,它极大的提高了我的工作效率,我使用它优化我的工作流程,维护开发环境,并结合其他工具扩展软件开发的体验感。 如果你之前还没有听说过这个软件,我建议你花 20 分钟了解一下它。有非常多的程序员使用这个软件,尤其是需要连接到远程服务器进行开发的同学。但我发现目前中文网络上还很少有能系统的讲解 “为什么要使用 tmux” 的文章,大多数文章都是直接开门见山地罗列怎么配置 tmux,再拉个表格梳理难以记忆的快捷键清单。 在这篇文章中,我不会花大篇幅介绍怎么使用 tmux,而是告诉你为什么要用它,以及我自己实践很多年的使用技巧。 三个 tmux 组...
LLVM New Pass Manager
这是一篇译文,主要介绍了 LLVM 中的 New Pass Manager 原文链接:https://blog.llvm.org/posts/2021-03-26-the-new-pass-manager/by Arthur Eubanks(Mar 26, 2021) Pass Manager 的介绍Pass Manager 的主要用途是调度 Pass 在各 IR 层级按顺序运行。 Pass 分为 transformation pass 和 analyses pass,它们可以选择运行在 module、function 等各种 scope 下,甚至更加抽象地,比如 call grap...














