2011-07-08 151 views
10

myTemplateTemplate期望第二個模板參數是具有一個參數的模板。 myDefaultTemplate是一個包含兩個參數的模板,第二個參數的默認類型爲int。爲什麼具有默認模板參數的模板無法在模板模板參數中用作模板參數較少的模板

在VS2008中,我得到的編譯錯誤:類模板的模板參數列表「myDefaultTemplate」不匹配模板參數「TT」

那麼,爲什麼不能使用myDefaultTemplate模板參數列表作爲只有一個參數的模板? 如果C++編譯器支持它,會有什麼負面影響嗎?

template 
<typename T1, typename T2 = int> 
class 
myDefaultTemplate{ 
     T1 a; 
     T2 b; 
}; 

template 
<typename T1, template<typename T2> class TT> 
class 
myTemplateTemplate{ 
     T1 a; 
     TT<T1> b; 
}; 

int main(int argc, char* argv[]){ 
     myTemplateTemplate<int, myDefaultTemplate> bar; //error here:  
     return 0; 
} 
+15

您應該獲得「最常使用'模板'這個詞的問題」的徽章:) :) – Praetorian

回答

7

從標準(見14.3.3段1 - [temp.arg.template):

A template-argument for a template template-parameter shall be the name of a class template, expressed as id-expression. Only primary class templates are considered when matching the template template argument with the corresponding parameter; partial specializations are not considered even if their parameter lists match that of the template template parameter.

這意味着該模板myDefaultTemplate可以看出僅作爲2個參數模板。默認參數將不被考慮。

+0

是的,這是我期望的答案。謝謝 – RolandXu