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 line class MyClass : public MyTemplate<MyClass>
, MyClass
is 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With