2011-07-08 12 views
10

myTemplateTemplate prevede che il secondo parametro template sia un modello con un argomento. myDefaultTemplate è un modello con due argomenti e il secondo argomento ha il tipo predefinito int.Perché il modello con argomenti modello predefiniti non può essere utilizzato come modello con meno argomenti del modello in Parametri modello di modello

In VS2008, ottengo l'errore di compilazione: la lista dei parametri modello per modello di classe 'myDefaultTemplate' non corrisponde l'elenco dei parametri del modello per il parametro template 'TT'

Quindi, perché non è possibile utilizzare il myDefaultTemplate come modello con un solo argomento? C'è qualche impatto negativo se il compilatore C++ lo supporta?

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

Si dovrebbe ottenere un badge per "Domanda che utilizza la parola 'modello' più volte" :) – Praetorian

risposta

7

Dalla standard (vedere 14.3.3 paragrafo 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.

Ciò significa che il modello myDefaultTemplate saranno visti solo come modello di 2 argomenti. L'argomento predefinito non verrà considerato.

+0

Sì, questa è la risposta che mi aspetto. Grazie – RolandXu

Problemi correlati