最近接触了c++的静态多态技术。为了更好的理解静态多态,首先要对动态多态做一个分析。
从动态多态的能力说起
一般我们讨论动态多态,是把它当作一个整体来分析。但是,动态多态实际上是由多种能力组成的。接下来,我会一个个的分析这些能力,并讨论相关的替代品。
要求子类拥有哪些函数
这是动态多态最为基本的功能,如下图,对于任意派生自base的类,都必须实现一个foo接口。
struct base
{
virtual void foo() = 0;
}
在c++20中,提供了concept,可以作为这个能力的替代;当然,concept是sfinae的替代品,在c++20之前,也可以通过sfinae来实现这个能力。
在父类可以调用子类的函数
这个能力一般是通过crtp机制来实现,不过多解释,提供一个例子
#include <iostream>
template<typename Derived>
class Person {
public:
auto& getDerived() {
return static_cast<Derived&>(*this);
}
auto lunch() {
getDerived().