C++奇特的递归模板式

2019-04-14 12:48发布

奇特的递归模板式(CRTP, Cruiously Recurring Template Pattern),该方式奇特之处在于:派生类会把自己本身作为模板参数传递给基类。 基本结构如下: template <typename D> class Base {/*...*/}; class Derived: public Base<Derived> {/*...*/}; 这里存在一个类似于循环继承的结构。 该模式最大的用处之一是在编译期间模拟虚函数。元编程涉及的函数大部分与模板相关,或者是类中的静态函数。 代码实例: #include template <typename D> struct Base { static void Fun() { D::Imp(); } }; struct Derived: public Base<Derived> { static void Imp() { std::cout << "Implementation from derive class" << std::endl; } }; int main() { Derived::Fun(); return 0; }