2012-01-22 118 views
2

我嘗試做這樣的事情:如何參數傳遞到模板的模板參數

ClassA的:

template < typename T1, typename T2 = int > 
class ClassA {}; 

ClassB的使用ClassA的作爲存儲實現:

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)?

回答

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; 
+0

感謝您的回答。沒有其他解決方案嗎?這看起來像模板參數3和圖4是ClassB的,但他們是專門ClassA的 –

+0

@jisaak:第要麼這樣,還是讓ClassA的有默認參數,並使用'ClassB的<雙,ClassA的<>>'在第二種情況下。 – kennytm

+0

好的,謝謝。 –