使用派生类模板的C ++基类

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的历史在维基百科上。