癸卯小记
凄凄微霜,靡靡年尽。 今岁是本号的第六年,朔其建立,不过蓦然起意,随性而记,阅者寥寥,未想习惯悄成,数载似梦,写作依旧。尔今随性依旧,暇日兴起,便构思编例,查经观典,细复完善,更得三两文章。 我写文颇… Continue Reading 癸卯小记
Dive deep into the C++ core, and discover more!
凄凄微霜,靡靡年尽。 今岁是本号的第六年,朔其建立,不过蓦然起意,随性而记,阅者寥寥,未想习惯悄成,数载似梦,写作依旧。尔今随性依旧,暇日兴起,便构思编例,查经观典,细复完善,更得三两文章。 我写文颇… Continue Reading 癸卯小记
再再再补充一个重载决议的例子。 大家可能在某些地方见过 ::std:: 这样的代码,比如 ::std::swap,::std::vector,::std::nullptr_t。 在 Qualified… Continue Reading std:: versus ::std::
霜风凄紧,神寒骨冷,忽忽冬月将尽。忙处更新渐少,今来补上。 本篇讲解如何利用 ChatGPT 快速实现一个控制台进度条小工具,相比单纯介绍某些特性,此种方式涉及知识的综合运用,也顺便谈谈如何结合 AI… Continue Reading 借助 ChatGPT 快速实现一个轻量级的控制台进度条库
模板加约束,其中有迷思,着意分析一下。 template <typename T> void f(T t) {} template <typename T> void f(T … Continue Reading T231212 Dummy Rquires Clause Positioning in Function Template Overloading
回顾上篇实现,可见会遇到内存重新分配问题,大文件读取存在隐性开销。 using result_type = std::vector<std::vector<std::string>&… Continue Reading Memory Reallocation when Parsing CSV Files
开窗见月,霜天悄然,欲更小文,以为消遣。 本篇以解析 CSV 为例,再谈 C++20 的使用。网上方法,颇为陈旧,看新方式何以优雅实现。 开始之前,定义为先: Comma-separated valu… Continue Reading Parsing CSV Files in C++20
前两章主要集中于应用实践,理论概念都是蜻蜓点水,本章将重点放在这些概念原理上,深入讲解一下。 宏二段替换 源文件扫描后,宏被替换为目标内容,替换实际上分为两个阶段。 第一阶段的替换发生在参数替换之时。… Continue Reading 《产生式元编程》第三章 替换蓝染概念纤悉
上篇讲解了 Compile time for,它是遍历技术中的迭代方式之一,特别常用。 它一般与 Fold expressions 组合使用,它们两个,一个相当于编译期的 Range-based fo… Continue Reading T231119 几种遍历技术实现结构体成员计数的比较
先说明,本篇并不是说 Expansion statements。 遍历方式分为两种,自下而上叫迭代,自上而下叫递归。 递归往往需要多个函数(if constexpr 可以避免),一般迭代是一种更加自然… Continue Reading T231111 Compile time for
这篇稍微总结一下异构类型的迭代方法。 首先是静态异构类型,主要指的就是 tuple like 类型,它们可以使用 std::apply 迭代。 void print(auto tuple_like_v… Continue Reading T231104 异构类型迭代法
这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。 一般二元 + 操作符用得较多,只有一个操作数时,没人会多此一举地把 1 写成 +1。 不过若是操作数为整数或无作用域枚举类型,一元 + 操… Continue Reading “+” 的几个使用小技巧,你了解吗
衔引 原理毕,复用续。历观编程概念,避及重复,提其不变,于迭代与递归为甚。产生式元编程,乃欲自动产生百千代码,迭代递归,自是重要组件,不可不备。 本章以 FOR_EACH 为例,渐次派生问题,引出技术… Continue Reading 《产生式元编程》第二章 自复用代码生成技
引言 自 C 以来,宏为代码生成工具。至 C++98 则有模板,泛型编程日益盛行。迄于 C++20,引编译期表达式,添 Concepts,元编程基础支持始渐完善。由此元编程之技稍简。而静态反射乃元编程… Continue Reading 《产生式元编程》第一章 宏编程计数引原理
宏编程的基本原理都已暗含于解决前两节问题的过程当中,本节开始,依此继续展开。 经由前面的努力,我们已掌握条件逻辑在宏编程的表示,代码生成往往涉及循环,所以今天来讲如何实现一个 FOR_EACH。 FO… Continue Reading T230925 Generative Metaprogramming with Macro Preprocessor (Part 3)
经过上篇分析实现,第一个需求「计算可变宏参数个数」已由 COUNT_VARARGS 基本实现。 让我们先总结一下用到的思想和发现的技术,再进入下一步。 2.1 通过增加一个间接层,能够解决无法直接解决… Continue Reading T230920 Generative Metaprogramming with Macro Preprocessor (Part 2)