template<class T> class MyClassT : public T<MyClassT> // <- { ... }; typedef MyClassT<Template1> MyClass1; typedef MyClassT<Template2> MyClass2;