Reputation: 58931
I try to do something like this:
ClassA:
template < typename T1, typename T2 = int >
class ClassA {};
ClassB using ClassA as a Storage implementation:
template
<
typename T,
template < typename = T, typename = int > class Storage = ClassA
>
class ClassB : public Storage<T> {};
Now I am able to create an instance of ClassB:
ClassB<double> myClass; // Ok, using ClassA (implicit) with <double,int> (implicit)
ClassB<double,ClassA> myClass2; // Ok, using ClassA (explicit) with <double,int> (implicit)
ClassB<double,ClassA<double,int>> myClass3; // Not ok, can't using ClassA (explicit) with <double,int> (explicit)
How can I parameterize the Storage (ClassA) for ClassB ?
Upvotes: 2
Views: 122
Reputation: 523304
You put those in a separate parameter. ClassA<double,int>
is a type already, so it cannot be used for the template template parameter.
template<typename T,
template <typename, typename> class Storage = ClassA,
typename StorageT1 = T,
typename StorageT2 = int>
class ClassB : public Storage<StorageT1, StorageT2> {};
ClassB<double> myClass;
ClassB<double, ClassA> myClass2;
ClassB<double, ClassA, double, int> myClass3;
Upvotes: 2