一个类如何从基于自身的模板继承?

Dan*_*tor 11 c++ generics templates

在阅读文章时,我遇到了以下语法:

template <typename T>
class MyTemplate
{
    T* member;
    T* method();
    // ...
}

class MyClass : public MyTemplate<MyClass>
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我不完全理解如何MyClass从基于自身的模板继承.你能解释一下这是如何工作的吗?

Set*_*gie 9

这被称为奇怪的重复模板模式,简称CRTP.它通过利用这样一个事实来实现静态多态性的效果:当你进入MyTemplate<MyClass>行时class MyClass : public MyTemplate<MyClass>,它MyClass是半定义的(它是一个不完整的类型),因此你可以存储指向该类型的指针等,以及用它做一些不需要完整类型的东西.