2010-11-05 3 views
6
class Example { 

    // ... 
}; 

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

    // ... 
}; 

Ma question est: pourquoi les paramètres de type non-type ne peuvent-ils pas être de type classe?Pourquoi les paramètres de type non-modèle ne peuvent-ils pas être de type classe

L'erreur que je reçois est

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

+2

Veuillez clarifier - quel type d'erreur de compilation voyez-vous? – seand

+0

Essayez (Exemple * ex). Cela fonctionnera:] – k06a

+0

Peut-être (Exemple & ex) fonctionne. Essayez juste. . . – k06a

Répondre

13

Simplement, parce que ce sont les règles. Rationnellement, les paramètres de modèle doivent être résolus au moment de la compilation et les objets de type classe ne sont construits que (même les temporaires et ceux ayant une durée de stockage statique) au moment de l'exécution. Vous pouvez uniquement résoudre les paramètres de modèle qui sont des "valeurs" au moment de la compilation, tels que les entiers et les types. Cependant, il est possible d'avoir des paramètres de modèle qui sont des pointeurs ou des références à des objets.

3

Selon 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. 

Il est évident que tout compilateur conforme std renvoie une erreur si vous déclarez la classe comme argument de modèle non de type.

Questions connexes