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 {