我尝试做这样的事情:
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)?
答案 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;