CRTP 在多继承中的妙用

多态是 C++ 面向对象编程的一个重要并且非常常用的特性,我们可能基于 Base 类实现了 Derived1 和 Derived2 类。根据开发的需求,我们可能继续分别派生 Derived1 和 Derived2 到 Derived1_A 和 Derived2_A 类。如果此时我们有了新的接口需求,但不能修改 Base 类(比如我们的开发准则不允许我们改动这部分代码,况且 Derived1 和 Derived2 也不需要这个接口),因此只能新增一个 Interface 接口类来为 Derived1_A 和 Derived2_A 提供新的接口。此时问题就出现了,如果 Interface 的实现中,我们可能需要访问到 Base 类中的成员变量,那么如何实现呢?最直观的想法是为 Derived1_A 和 Derived2_A 分别实现 Interface,但是有很多实现可以共用,我们没必要写重复的代码,但是 Interface 类本身又无法访问到 Base 类的成员(不能让 Interface 继承 Base,这样 Derived1_A 与 Derived2_A 多继承时就存在问题),该怎么办呢?此时 CRTP 就可以发挥它的妙用了。

发布于 编程开发

【ClickHouse 源码学习】线程池与后台任务

本文对 ClickHouse 代码中最重要的基础设置之一——线程池与后台任务框架进行了介绍,并总结了一些在 ClickHouse 二次开发中的经验教训。

发布于 数据库

校招生在找工作时如何装成一个经验丰富的开发者

应届生在找正式工作时,除了熟练掌握算法题与八股之外,实习、项目经历也是一大考察点。如果对口的经历比较丰富,也能给面试官留下好的印象甚至免掉不少算法与八股环节。本文笔者从自身经历出发,侧重于实习与项目经历部分,总结了自己如何装成一个经验比较丰富的开发者。

发布于 生活

关于 Parquet Encodings 相关的一些记录

最近在看 Parquet 支持的各种编码的详细的实现,但是发现官方文档中对于一些细节的描述并不是很清楚,在此结合源码记录一下。

发布于 源码笔记

RinChanNOW 的 2023 年 7 月圣地巡礼合集

二次元去日本当然要圣地巡礼。

发布于 生活

Databend Unnest 函数的实现

unnest 是一个在分析查询中比较常见的函数,它的作用是将一个嵌套(多维)数组展开为一个一维向量。

发布于 数据库
1237