奇特的递归模板式
奇特的递归模板式(cruiously Recurring Template Pattern, CRTP)是一种派生类的声明方式,其“奇特”之处在于:派生类会将本身作为模板参数传给其基类。
template<typename D> class Base {...}
class Derived : public Base<Derived>{....}
CRTP有很多应用场景,模拟虚函数是其典型应用之一。元编程涉及的函数大部分和模板相关,或者往往是类中的静态函数。在这种情况下,如果要实现类似运行期的多态特性,就可以考虑使用CRTP。
template <typename D>
struct Base{
static void Fun(){
D::Imp();
}
}
struct Derived : public Base<Derived>{
static void Imp(){
cout << "Implementation from derived class" << endl;
}
}
int main(){
Derived::Fun();
}
参考
《C++模板元编程实战》 – 李伟
(END)