Это называется CRTP.Он используется для статического полиморфизма, который может быть быстрее, чем использование виртуального.
: public MyTemplate<MyClass>
Создает экземпляр MyTemplate<MyClass>
, хотя, поскольку MyClass неполон, вы можете использовать T
только так, чтобы не требовался полный тип,Например, с помощью указателя или вызова функции-члена.
В любом случае, просто посмотрите на свой фрагмент, по сути, он такой же:
class MyClass
{
MyClass* member;
MyClass* method();
}
Это совершенно законно и понятно.