2010-12-09 34 views
9

Possible en double:
What is the difference between a template class and a class template?"modèle de classe" et "classe de modèle"

Je l'ai vu plusieurs C++ gourous rip sur les gens pour appeler quelque chose comme

template <typename T> 
class SomeClass 
{ 
    //... 
}; 

une classe de modèle au lieu d'un modèle de classe. (Pas une énorme déchirure, remarquez, mais comme une indication que quelqu'un n'est pas un programmeur expérimenté C++) Oui, le mot correct est "modèle de classe" - parce que c'est un modèle utilisé pour générer des classes.

Mais je ne comprends pas pourquoi dans une conversation typique, la distinction est importante. Personne qui écoute/lit ce que vous avez écrit ne va comprendre ce que vous voulez dire par ailleurs.

Y a-t-il une utilisation spécifique des mots "template class" dans la norme ou autrement qui fait un usage grossier de ces mots dans cet ordre?

+0

N'oubliez pas qu'il y a beaucoup de gens qui insistent pour «appeler les choses correctement». – sharptooth

+0

@sharptooth: Je suis tout pour le nitpicking des parties techniques ou pédantes de réponses mineures (je suis un programmeur C++ dans l'âme après tout). Mais habituellement, ce commentaire s'adresse à la personne qui fait le commentaire plutôt qu'au contenu de la réponse. –

+0

duplication possible de [Quelle est la différence entre une classe de modèle et un modèle de classe?] (Http://stackoverflow.com/questions/879535/what-is-the-difference-between-a-template-class-and- a-class-template) ou [Classe templates et classe de modèles] (http://stackoverflow.com/questions/2983146/class-templates-and-template-class) –

Répondre

5

Selon this page:

Notez la distinction entre les termes de modèle de classe et de la classe de modèle:

  • modèle de classe est un modèle utilisé pour générer des classes de modèle. Vous ne pouvez pas déclarer un objet d'un modèle de classe.
  • La classe de modèle est une instance d'un modèle de classe.

Cette page MSDN semble se mettre d'accord sur cette définition:

Contrairement à des modèles de fonction, lorsque instancier un modèle de classe, vous devez instancier explicitement la classe en donnant les arguments pour la classe modèles.

[...]

le compilateur génère un code pour une classe de modèle ou une fonction lorsque la classe ou la fonction est instancié.

1

Une recherche rapide a produit:

Q: Y at-il une différence entre un modèle de fonction et une fonction de modèle , ou entre un modèle de classe et une classe de modèle ? Le terme "modèle de fonction" fait référence à un type de modèle. Le terme "fonction de modèle" est parfois utilisé pour désigner la même chose, et parfois pour signifier une fonction instanciée à partir d'un modèle de fonction. Cette ambiguïté est mieux évitée en utilisant "modèle de fonction" pour le premier et quelque chose comme comme "instance de modèle de fonction" ou "instance d'un modèle de fonction " pour ce dernier. Notez qu'un modèle de fonction n'est pas une fonction. La même distinction s'applique à "modèle de classe" par rapport à "classe de modèle".

Cela me semble logique.

+2

Lien? :) Je ne sais pas RANDOM-INTERNET-SITE-ICI de RANDOM-INTERNET-SITE-ICI! : P –

+0

http://womble.decadent.org.uk/c++/template-faq.html –

0

Personnellement, je ne ferais pas la correction, mais je peux voir la logique derrière cela. Ce n'est pas différent que d'appeler une superclasse une sous-classe ou vice-versa. Ce qu'ils disent est intrinsèquement incorrect, et ne signifie pas la même chose.

Il est important, surtout pour les programmeurs plus jeunes, de penser en termes de code, ce qui n'est pas possible lorsque vous traduisez incorrectement la langue vers l'anglais.

+0

Hmm .. chose que je suis fortement en désaccord avec l'analogie que c'est comme sous/superclasse. Si vous mélangez les deux, la confusion est presque inévitable. Si vous mélangez "template de classe" et "template class", la confusion ne se produit presque jamais. –

+0

@Billy: peut-être l'analogie est un cas trop fort, mais l'idée tient encore ... oublier la différence entre quand utiliser le mot sub et quand utiliser super est une erreur commune chez les programmeurs juniors, probablement juste en raison de leur visuel similarité. Je ne dis pas que je m'inquiète que cela cause de la confusion, je pense plutôt que c'est rendre service à quelqu'un et aider ses compétences si la différence est clarifiée. –