CRTP
mixins
EBO
简洁的语言概括一下就是:
CRTP:子类是父类的模板参数,用来实现静态多态
mixins:原本是一种通过继承增加类功能的设计模式,借助CRTP的话,应该和上面常说的CRTP反过来了:父类是子类的模板参数。
EBO是编译器的优化。
具体可以看看GraphicBuffer类的定义:
49 class GraphicBuffer
50 : public ANativeObjectBase<ANativeWindowBuffer, GraphicBuffer, RefBase>,
51 public Flattenable<GraphicBuffer>
52 {
这个定义应该就是传统意义上的CRTP。但是ANativeObjectBase的定义应该是mixins:
33 /*
34 * This helper class turns a ANativeXXX object type into a C++
35 * reference-counted object; with proper type conversions.
36 */
37 template <typename NATIVE_TYPE, typename TYPE, typename REF,
38 typename NATIVE_BASE = android_native_base_t>
39 class ANativeObjectBase : public NATIVE_TYPE, public REF
40 {