This is a bit confusing what you mean when you say:
Since Publisher is a template, but you are not passing any arguments to it.
Anyway, here are a few options:
In C ++ 11, you can use template aliases:
template<class T> class BasePublisher { template<typename U> using SubscriberType = BaseSubscriber<U>; };
You can also use nested classes:
template<class T> class BaseSubscriber {}; template<class T> class BasePublisher { template<class U> class BaseSubscriber {}; };
Or change ClassA to use a type member:
template<class T> class BasePublisher { template<class U> struct SubscriberType { typedef BaseSubscriber<U> type; }; }; template< template<class T> class SubscriberT > class ClassA { typedef typename SubscriberT::type Subscriber; };
Or sometimes inheritance works if you don't need an alias:
template<class T> class BasePublisher { template<class U> struct SubscriberType : BaseSubscriber<U> {}; };
Pubby source share