Это возможно, но только если вы определите реализацию some
, иначе вы столкнетесь с ошибками компиляции.Возможно, вы также захотите добавить защищенный конструктор, чтобы ваш базовый класс не мог быть создан и использован вне того, как вы его определяете в области заголовка.
template<typename T>
class TestParent{
public:
T* some() { return new T(); }
//this is suggested
protected:
TestParent(){}
};
class TestChild : public TestParent<TestChild>{}
Это используется в любопытном шаблон рекурсивного шаблона и другие методы из основанного на политике дизайна , ставшего популярным благодаря книге Александреску .