2010-11-05 14 views
6
class Example { 

    // ... 
}; 

template <typename T, Example ex> //Error 
class MyExample{ 

    // ... 
}; 

La mia domanda è perché non è possibile che i parametri di tipo non modello siano di tipo classe?Perché i parametri di tipo non modello possono essere del tipo di classe

L'errore che ottengo è

error: ‘class Example’ is not a valid type for a template constant parameter

+2

Si prega di chiarire - che tipo di errore del compilatore stai vedendo? – seand

+0

Prova (esempio * ex). Funzionerà:] – k06a

+0

Forse (Esempio ed ex) funziona. Prova . . . – k06a

risposta

13

Semplicemente, perché queste sono le regole. Razionalmente, i parametri del template devono essere risolti in fase di compilazione e gli oggetti di tipo classe sono costruiti solo (anche temporaries e quelli con durata di archiviazione statica) in fase di esecuzione. È possibile avere solo parametri template che sono "valori" risolvibili in fase di compilazione come numeri interi e tipi. Tuttavia, è possibile avere parametri di template che sono puntatori o riferimenti a oggetti.

3

Secondo c++ standard,

A non-type template-parameter shall have one of the following (optionally cv-qualified) types: 
— integral or enumeration type, 
— pointer to object or pointer to function, 
— reference to object or reference to function, 
— pointer to member. 

A non-type template-parameter shall not be declared to have floating point, **class**, or void type. 

E 'ovvio che qualsiasi std conformi compilatore genera un errore se si dichiara classe come tipo di argomento non template.

Problemi correlati