C++ Base Class using Derived Class Template
本问题已经有最佳答案,请猛点这里访问。
我试图从DLIB项目中了解以下类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | template<typename EXP> class matrix_exp { public: //typedef matrix<type, NR, NC, mem_manager_type, layout_type> matrix_type; matrix_exp() { cout <<"matrix_exp()" << endl; cout << __PRETTY_FUNCTION__ << endl; } void foo() { cout <<"matrix_exp" << endl; } }; template<typename T, long num_rows, long num_cols, typename mem_manager, typename layout> class matrix: public matrix_exp<matrix<T, num_rows, num_cols, mem_manager, layout> > { public: void foo() { cout <<"matrix" << endl; } }; |
基础类如何使用派生类作为模板?他们还使用了typedef matrix matrix"type";在matrix"exp"中。有人能解释一下这是如何工作的吗?
这就是所谓的奇怪的循环模板模式(crtp)。
有一个stackoverflow标签只用于crtp。
CRTP的历史在维基百科上。