1. 背景
奇异递归模板模式(Curiously Recurring Template Pattern,CRTP),CRTP是C++模板编程时的一种惯用法(idiom):把派生类作为基类的模板参数。更一般地被称作F-bound polymorphism CRTP在C++中主要有两种用途:
- 静态多态(static polymorphism)
- 添加方法同时精简代码
2. 奇异递归模板介绍
2.1 标准范式
template<class T>
class Base
{
// methods within Base can use template to access members of Derived
};
class Derived : public Base<Derived>
{
// ...
};
这样做的目的是在基类中使用派生类,从基类的角度来看,派生类其实也是基类,通过向下转换[downcast],因此,基类可以通过static_cast把其转换到派生类,从而使用派生类的成员,形式如下:
template <typename T>
class Base
{
public:
void doWhat()
{
T& derived = static_cast<T&>(*this);
// use derived...
}
};