如果您有面向对象编程(OOP)的背景,并打算深入研究现代 C++ 设计,不妨从Loki 库中找到。
Loki 是由 Andrei Alexandrescu 创建的 C++ 软件库,与他的著作《Modern C++ Design》同步开发。
C++ 社区可以从一个为实现设计模式提供健壮框架的库中受益。Loki 是承担这一角色的有力候选。因此,将 Loki 现代化并尽可能多地融入广泛使用的设计模式,将极大地造福 C++ 开发者。
该库大量使用 C++ 模板元编程来实现多个广泛使用的结构,包括类型列表(typelist)、仿函数、单例、智能指针、对象工厂、访问者和多方法(multimethod)。
以下是作者阐述的该库设计背后的动机:
- Loki 允许用户选择性地只使用他们需要的特性,每个组件都独立于其他组件运作。
- 秉承"小即是美"的原则,Loki 将其内部依赖保持在最低限度。
- 该库追求"乘法式卓越",专注于通过组合简洁、抽象的行为模块(策略)来实现精细、专门化的设计。
- Loki 强调战略性而非战术性的方法,优先考虑设计和架构组件,而非底层细节。
- 作为设计模式的集合而非单体设计,Loki 最大限度地减少了对其运行环境的假设,并通过明确定义的扩展点来提供灵活性,以集成默认决策。
- Loki 面向现代编译器量身打造,在 C++ 标准范围内追求代码清晰,不为能力较弱的编译器做妥协。
- 它的组件被设计得紧凑、易于理解和实现,无论单独使用还是组合使用都很有效,并在实际项目中高度实用。
Loki 融入了若干有价值的设计模式,包括:
- 工厂模式(Factory)
- 抽象工厂模式(Abstract Factory)
- 访问者模式(Visitor)
- 单例模式(Singleton)
它还运用了若干实用的惯用法:
- 基于策略的设计(policy based design)
- 多重分派(Multiple dispatcher)
- Pimpl
- Printf(类型安全的 printf 替代品)
- 有序静态对象创建
- 作用域守卫指针(Scope guard pointer)
- 小对象分配器(Small Object Allocator)
- 智能指针(Smart pointer)
- 编译期检查(Compile time check)
对以上提到的惯用法的详细解释,可以在这篇富有见地的资料中找到。
CoderGears 发起了一项竞赛来更新这个了不起的库。主要目标是通过一个精心打造的库来学习设计模式,同时充分利用最近 C++ 标准引入的特性。
对于渴望着手将其现代化的开发者来说,要解决的第一个问题是:这个重构过程的第一步是什么?
Loki 创建于更新的 C++ 标准引入之前,这意味着作者最初设计和开发的一些类在这些近期标准中已有了等价物。它们包括:
- SmartPointer(智能指针)
- Tuple(元组)
- NullType(空类型)
- Typelist(类型列表)
- static_check(静态检查)
因此,第一步是移除这些类,并在源代码的其余部分替换它们的使用。
在不久的将来,我们计划发布一系列关于这个不可思议的库的文章,帮助开发者将其现代化。
