zhouqijie

奇特的递归模板式

奇特的递归模板式(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)