55 votes

Modèle de membre dans la classe locale

Étant donné le code suivant:

 void f()
 {
     class A
     {
         template <typename T>
         void g() {}
     };
 }

g++ 4.4 (et aussi g++-4.6 -std=gnu++0x) se plaint: "non valide déclaration de membre de modèle dans le local de classe".

Apparemment classes locales ne sont pas autorisés à avoir de modèle de membres. Quel est le but de cette limitation? Il sera supprimé dans C++0x?

Remarque: Si je fais la classe locale elle-même un modèle, plutôt que de donner un modèle de membre:

 void f()
 {
     template <typename T>         
     class A
     {
         void g() {}
     };
 }

Je reçois le message "erreur: un modèle de déclaration ne peut pas apparaître dans le bloc de portée".

11voto

eci Points 616

Le but de cette limitation? Juste une supposition, mais:

  • vous pouvez utiliser la classe de modèle/modèle de fonction de membre seulement au sein de la fonction englobante. Par conséquent, vous le savez déjà tous types à l'intérieur de la fonction, et donc peut spécifier directement les types (de plusieurs types, bien sûr, le modèle variante aurait économisé un peu de temps).
  • bien que cela puisse ne pas sembler si, c'est un travail pour tous compilateur créateurs et de l'espace pour les bugs et donc il doit être en vaut la peine.

Fait amusant: Essayez d'utiliser un local de classe à l'intérieur d'une fonction d'un type de retour pour un (c++0x)-fonction lambda déclarée dans la fonction: MSVC 2010: erreur interne du compilateur ^^.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X