While reading an article, I came across the following syntax:
template <typename T>
class MyTemplate
{
T* member;
T* method();
// ...
}
class MyClass : public MyTemplate<MyClass>
{
// ...
}
I don’t exactly understand how MyClass can inherit from a template that’s based on itself. Could you please explain how this works?
This is called the Curiously Recurring Template Pattern, or CRTP for short. It is used to achieve the effect of static polymorphism by taking advantage of the fact that by the time you get to
MyTemplate<MyClass>in the lineclass MyClass : public MyTemplate<MyClass>,MyClassis semi-defined (it is an incomplete type) so you can store pointers to that type, etc, and do things with it that do not require a complete type.