CRTP 在多继承中的妙用
多态是 C++ 面向对象编程的一个重要并且非常常用的特性,我们可能基于 Base 类实现了 Derived1 和 Derived2 类。根据开发的需求,我们可能继续分别派生 Derived1 和 Derived2 到 Derived1_A 和 Derived2_A 类。如果此时我们有了新的接口需求,但不能修改 Base 类(比如我们的开发准则不允许我们改动这部分代码,况且 Derived1 和 Derived2 也不需要这个接口),因此只能新增一个 Interface 接口类来为 Derived1_A 和 Derived2_A 提供新的接口。此时问题就出现了,如果 Interface 的实现中,我们可能需要访问到 Base 类中的成员变量,那么如何实现呢?最直观的想法是为 Derived1_A 和 Derived2_A 分别实现 Interface,但是有很多实现可以共用,我们没必要写重复的代码,但是 Interface 类本身又无法访问到 Base 类的成员(不能让 Interface 继承 Base,这样 Derived1_A 与 Derived2_A 多继承时就存在问题),该怎么办呢?此时 CRTP 就可以发挥它的妙用了。