Bootstrap

CRTP mixins EBO

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  {
;