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 ?
You put those in a separate parameter.
ClassA<double,int>is a type already, so it cannot be used for the template template parameter.