Martin Brandl
Martin Brandl

Reputation: 58931

How to pass parameters to a template template parameter

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

Answers (1)

kennytm
kennytm

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

Related Questions