读《C++ API 设计》总结

优秀 API 的特征

问题域建模

API 应该对它所解决的问题提供良好的逻辑抽象。当把 API 文档提供给用户时,他应该能够理解接口中的概念并且知道它的工作机制。

API 应该对问题域的关键对象建模,即面向对象设计。一般使用 UML 类图或对象图表示对象模型。

隐藏实现细节

API 应该隐藏所有的实现细节,避免修改 API 对已有的客户造成影响。

C++ 中的自动类型推导

模板参数推导

函数模板类型推导

简单的函数模板:

1
2
template <typename T>
void f(ParamType param);

调用时:

1
f(expr);

在编译期间,编译器会推导两个类型:一个是 T ,另一个是 ParamType ,比如:

1
2
3
4
5
6
template <typename T>
void f(const T& param);

// 调用
int x = 0;
f(x);

T 推导为 int ,ParamType 推导为 const inst& ,T 的推导不仅取决于 expr 的类型,还取决于 ParamType 的类型。

大理游记

苍山雪,洱海月,上关花,下关风

这句谚语意思是大理点苍山白雪皑皑,洱海湖月明水秀,石门关花团簇锦,龙尾关风光宜人。形容云南大理到处景色优美。

花了一个周末的时间去大理逛了逛,证实了上面的谚语没有说错。

Windows 上使用 emacs 收发邮件

介绍

在 Linux 和 MacOS 上用 Emacs 收发邮件有很多工具和教程,但是在 Windows 上基本不可行。我一直在 Windows 上使用 Emacs,之前用 Foxmail 处理邮件,现在想把邮件处理和 org mode 的 agenda 系统联系起来,所以就研究了一套能够正常在 Emacs 中处理邮件的方案。

Dart 的语法

语言简介

Dart 语言是为客户端开发而设计,优先考虑多平台的开发,它的主要特点:

  • 编译型:为了支持多平台而开发的各种编译器
  • 强类型:使用静态类型检查,也支持 dynamic 类型及运行时类型检查
  • GC :由 Dart 运行时环境负责分配和管理内存
  • 面向对象:基于 mixin 继承机制

Dart 平台

Dart 通过编译技术来支持各种不同的平台: