T240730 inline namespace
T240725 说到,Unnamed namespaces 有一个唯一的名称会通过 using-directives 自动导入,倘若可以手动指定这个名称,就是 inline namespaces 了。… Continue Reading T240730 inline namespace
Dive deep into the C++ core, and discover more!
T240725 说到,Unnamed namespaces 有一个唯一的名称会通过 using-directives 自动导入,倘若可以手动指定这个名称,就是 inline namespaces 了。… Continue Reading T240730 inline namespace
Unnamed namespaces,也叫 Anonymous namespaces,是命名空间的一种特殊形式。这种形式可以省略命名空间的名称,如: namespace { /* .. . */ } … Continue Reading T240725 Unnamed namespaces
本篇分享详细解释一下 Top-level const 和 Low-level const 的概念。 Top-level 和 Low-level 指的是名称修饰符所处的位置,const 是最常见的修饰符… Continue Reading T240516 Top-level const and Low-level const
这是昨天群里的一个问题,但我想谈的是背后的本质问题。 这个问题其实可以简化为: template <typename …Args> void foo(std::function<… Continue Reading T240104 Failed to Passing a Lambda Expression to std::function
不知大家是否遇到过这样的代码: template <class… Args> void f(Args……) {} 参数包后面紧跟着 6 个 .,一般不是用 … 来扩展参数包… Continue Reading T240102 What does the …… mean in C++?
模板加约束,其中有迷思,着意分析一下。 template <typename T> void f(T t) {} template <typename T> void f(T … Continue Reading T231212 Dummy Rquires Clause Positioning in Function Template Overloading
上篇讲解了 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 异构类型迭代法
宏编程的基本原理都已暗含于解决前两节问题的过程当中,本节开始,依此继续展开。 经由前面的努力,我们已掌握条件逻辑在宏编程的表示,代码生成往往涉及循环,所以今天来讲如何实现一个 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)
这期开始将写一些关于宏编程的内容,讲解宏作为代码生成工具在产生式元编程中的运用。 有人可能会有疑问,已有模板作为元编程工具,为何还需要使用宏这种古老的代码生成工具?自然是因为如今模板元编程的代码生成能… Continue Reading T230917 Generative Metaprogramming with Macro Preprocessor (Part 1)
今天再来看看 C++23 Monadic std::optional,在 Overview of C++23 Features 只是简单介绍了用法,这里来说说设计原理。 std::optional 是… Continue Reading T230807 Reviewing C++23 Monadic std::optional
今天讲一个 Idiom 加一些 Tricks。 本次内容紧紧围绕着 The Rule of the Big Five,即 destructor copy constructor copy assign… Continue Reading T230723 copy-and-swap Idiom and More Tricks
本次谈逻辑分派。 三种最基本的逻辑关系为相似、承接和因果关系。 逻辑分派主要指的是因果关系,因果关系里面又包含条件关系。因果关系是一种非常特殊且重要的关系,表示两个功能块之间具备极强的依赖性。功能 B… Continue Reading T230713 Dispatch table