如何将参数传递给模板模板参数

时间:2012-01-22 13:15:04

标签: c++ templates

我尝试做这样的事情:

ClassA的:

template < typename T1, typename T2 = int >
class ClassA {};
使用ClassA作为存储实现的ClassB:

template 
<
 typename T,
 template < typename = T, typename = int > class Storage = ClassA
>
class ClassB : public Storage<T> {};

现在我可以创建一个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)

如何为ClassB参数化存储(ClassA)?

1 个答案:

答案 0 :(得分:2)

您将它们放在一个单独的参数中。 ClassA<double,int>已经是一种类型,因此不能用于模板模板参数。

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;