79 votes

Quelle est la différence entre une classe de modèle et un modèle de classe?

Quelle est la différence entre une classe de modèle et un modèle de classe?

113voto

Not Sure Points 3128

C'est un point commun de confusion pour beaucoup (y compris la Programmation Générique page sur Wikipédia, en C++ tutoriels, et les autres réponses sur cette page). Dans la mesure du C++ est concerné, il n'y a pas une telle chose comme une "classe de modèle," il n'est qu'un "modèle de classe." La façon de lire cette phrase est "un modèle de classe", par opposition à un "modèle de fonction", qui est "un modèle pour une fonction." Nouveau: les classes n'définir des modèles, des modèles de définir des classes (et fonctions). Par exemple, c'est un modèle, plus précisément un modèle de classe, mais c'est pas une classe:

template<typename T> class MyClassTemplate
{ 
    ...
};

La déclaration MyClassTemplate<int> est une classe, ou de manière affectée, une classe basée sur un modèle. Il n'y a pas les propriétés d'une classe basée sur un modèle par rapport à un classe pas basé sur un modèle. Les propriétés particulières sont du modèle lui-même.

L'expression "modèle de classe" ne veut rien dire, parce que le mot "modèle" n'a pas de sens d'un adjectif lorsqu'il est appliqué à le nom de "classe" dans la mesure du C++. Il implique l'existence d'une classe qui est (ou qui définit) un modèle, qui n'est pas un concept qui existe en C++.

Je comprends la commune de confusion, comme c'est probablement basée sur le fait que les mots apparaissent dans l'ordre de la "classe de modèle" dans la langue, qui est une toute autre histoire.

11voto

La différence est que le terme "modèle de classe" n'existe pas dans la Norme C++. C'est un terme utilisé par la plupart des gens qui pense que le terme de "modèle de classe" est source de confusion (comme l'intervalle Qt entreprises de Nokia et anciennement Trolltech).

Le Standard n'a pas de concept, donc, c'est pour les autres peuples, de faire une différence. Certaines personnes l'utilisent comme synonymes, et d'autres disent que le terme "modèle de classe" se réfère à un instancié ou explicitement spécialisées modèle de classe, ce qui serait l'équivalent du terme "modèle de classe de spécialisation". Historyically, il avait ce sens. Le Annoté Manuel de Référence définit à la page 343

Une classe générée à partir d'un modèle de classe est appelée classe de modèle, comme c'est une classe définie spécifiquement avec un modèle de nom de classe comme son nom l'

Le non-terminal modèle de nom de classe est équivalente à la non-terminal modèle-id utilisé dans l'actuel Standard et descend template-name < arguments >.


Pour vous familiariser avec l'aujourd'hui termes, ce qui est plus important que d'utiliser douteux termes anciens

// (1) defines a class template
template<typename T> class A { }; 

// (2) defines a class template explicit specialization 
template<> class A<int> { };

// (3) defines a class template partial specialization
template<typename T> class A<T*> { };

// (4) explicitly instantiates A<char>. 
template class A<char>;

// (5) implicitly instantiates A<short> (because of the member declaration)
struct D { A<short> a; };
  • Le BRAS de la classe (2), et les classes générées par (4) et (5) une classe de modèle. Je ne suis pas sûr que le BRAS déjà connaissance partielle de spécialisations. Mais si so (3) n'a pas été appelé une classe de modèle, parce que (3) ne permet pas de définir une classe, mais définit un modèle.
  • La Norme actuelle des appels de classe (2), et ceux générés par (4) et (5) modèle de classe spécialisations. Et (3) est appelé une spécialisation partielle, par opposition à une spécialisation explicite. Il a aussi parfois des appels (3) une spécialisation (3.2/5 - cependant, avec la clarification de la croix-liens), bien que je trouve que ce n'est pas tout à fait clair pour moi, puisqu'il définit une "spécialisation" comme "une classe, une fonction ou un membre de la classe", qui (3) n'est pas satisfait.

7voto

Peter Perháč Points 8007

Un modèle de classe est liée à la Méthode de Modèle de modèle de conception, tandis que le modèle de classe est juste un "remplir-dans-le-blancs" modèle de classe.

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