奇异递归模板模式(Curiously Recurring Template Pattern)
奇异递归模板模式(Curiously Recurring Template Pattern,CRTP),CRTP是C++模板编程时的一种惯用法(idiom):把派生类作为基类的模板参数。更一般地被称作F-bound polymorphism。
1980年代作为F-bound polymorphism被提出。Jim Coplien于1995年称之为CRTP。
CRTP在C++中主要有两种用途:
- 静态多态(static polymorphism)
- 添加方法同时精简代码
1. static ploymorphism
#include <iostream>
using namespace std;
template <typename Child>
struct Base
{
void interface()
{
static_cast<Child*>(this)->implementation();
}
};
struct Derived : Base<Derived>
{
void implementation()
{
cerr << "Derived implementation\n";
}
};
int main()
{
Derived d;
d.interface(); // Prints "Derived implementation"
return 0;
}
网友评论