设计模式之装饰器模式
0. 前言 当你在编码时,如果需要对类的功能进行扩展,或者不满足于当前类提供的接口时,你要如何做呢?是直接写一个子类继承,然后基于父类进行扩展?还是说直接修改某些类或者接口? 上面提出的方案在很多情况下都非常糟糕:如果遇到问题就去写一个子类继承,那么对象之间的继承关系和代码的耦合度将会达到一个惊人的复杂程度,越往后写项目越难以维护;而第二种方案则显…
thumbnail
[转载]2025 自托管数字图书馆:Z-Library Telegram + Syncthing + OPDS (适用于 Kobo, PocketBook, KOReader)
发布时间:2025年10月9日 | 更新时间:2026年1月19日 原文 2026-02-11 10:53:13 星期三作者:William Elimbi 我只做了以分享为目的的翻译工作 如果你是作者希望移除此文章,可以在此联系我 I only did translation for the purpose of sharing.If you ar…
基于C++17结构化绑定的编译期反射(部分)
Part 0. 前言 本文受alibaba yalantinglibs启发,旨在学习利用C++17加入的结构化绑定特性实现一些编译期的反射技术,同时采用与yalantinglibs相同或类似的实现方式,以便读者自行探索yalantinglibs中的其他部分。 Part 1. 聚合类型(Aggregate Class)的编译期反射方法 1.1 将聚合…
C++:空基类优化(EBO)及其部分应用
前言 本文的目的在于用尽可能少的字数及版面下,直观地展示空基类优化(EBO/EBCO)的作用。 为什么要使用空基类优化 C++标准规定对象的大小不能为0。标准要求每个对象在内存中必须占有一定的空间,这意味着即使这个类没有任何成员,sizeof(A)也不会为0,那么: class A { /* some functions here */ }; cl…
关于最近见到的一部分CPP问题的思考与解答
前言 在逛知乎时,偶然遇到了这样一个回答: 这里有两组面试题,都是最基础的题目,但是轻松通过的话已经超过我面试过的所有人。 Welcome to the C/C++ Quiz!C/C++ Quiz 2 本文就该页面提到的题目进行思考与解答(注:默认少打的分号、拼错的变量、函数、类等名字不算错误并已更正) C++ Quiz 2 Part B. Que…
vector中emplace_back与push_back的不同
2025/7/11 添加了一个参考文章,并将【参考】部分重命名为参考—延伸部分 前言 std::vector中有两个函数都能向容器尾部添加元素,分别是push_back和emplace_back 在发展历史上,emplace_back较push_back后推出,以解决push_back中存在的一些效率问题。 我们现在引出三个问题: emplace_…
std库中的一个SFINAE实例
GCC std库实现中的一个SFINAE实例 Part 1. 源代码 在std::tuple的swap函数上有这样一个noexcept声明: noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) 作用是检测tuple内的每一个元素是否是不抛出可交换的,这里…
thumbnail
C++ Memory Order
前言 原子变量是C++解决多线程中数据竞争、线程同步的一种方式,而内存序(Memory Order)则是使用原子变量前的一个重要知识。 在Luyu Huang's Blog的文章中,已经对C++的内存序做出了比较清晰易懂的解释,本文的目的旨在提炼其文章中的核心思想,补充其文章中所提到的不足和发表一点作者自己的看法与感想。 原子变量 在使用原子变量时…
分享一下好的技术文章(持续更新)
计算机体系结构 计算机体系结构,知乎 GIS GIS,知乎专栏 基于geopandas的空间数据分析——数据结构篇,博客园 C++ C++应用 C++伪共享问题和缓存乒乓效应,知乎 字符串 C++20的constexpr string为什么无法工作,知乎.YKIKO#GCC对SSO的自引用实现 C++语言 函数 洞悉C++函数重载决议,知乎 CPO…
隐藏
变装