如何利用模板 + 继承的方式,形成动态多态的效果呢?
问题:静态多态如何实现继承关系 从而达到 动态多态的效果呢?
答案:利用模板形成的算法 CRTP
具体思路
1、先看动态多态
class A {viitual void f();
}class B : A {virtual void f() override;
}A * a = new B();
a->f();
2、利用 模板 + 继承的方式,形成动态多态的效果
CRTP
template<T>
class A {void f() {static_cast<T*>(this)->f();}
}
class B : A<B> {void f() {}
}A<B>* a = new B();
a->f();