2010-12-09 16 views
9

Duplicar posibles:
What is the difference between a template class and a class template?"plantilla de clase" frente a "clase de plantilla"

He visto varios gurús C++ RIP en la gente para llamar algo así como

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

una clase de plantilla en lugar de una plantilla de clase. (No es una gran rasgadura, tenga en cuenta, pero como una indicación de que alguien no es un programador de C++ con experiencia) Sí, la palabra correcta es "plantilla de clase", porque es una plantilla utilizada para generar clases.

Pero no entiendo por qué en una conversación típica la distinción importa. Nadie que escuche/lea lo que has escrito entenderá de lo que estás hablando para decir cualquier otra cosa.

¿Hay algún uso específico de las palabras "clase de plantilla" en la norma o de otro modo que haga uso de esas palabras en ese orden groseramente incorrecto?

+0

No olvide que hay muchas personas que insisten en "llamar las cosas bien". – sharptooth

+0

@sharptooth: estoy a favor de tomar pequeñas partes técnicas o pedantes de las respuestas (después de todo, soy un programador de C++). Pero, por lo general, este comentario está dirigido a la persona que hace el comentario y no al contenido de la respuesta. –

+0

posible duplicado de [¿Cuál es la diferencia entre una clase de plantilla y una plantilla de clase?] (Http://stackoverflow.com/questions/879535/what-is-the-difference-between-a-template-class-and- a-class-template) o [Plantillas de clase y clase de plantilla] (http://stackoverflow.com/questions/2983146/class-templates-and-template-class) –

Respuesta

5

Según this page:

Nota la diferencia entre los términos plantilla de clase y clase de plantilla:

  • plantilla de clase es una plantilla que se utiliza para generar clases de plantilla. No puede declarar un objeto de una plantilla de clase.
  • La clase de plantilla es una instancia de una plantilla de clase.

Esta página MSDN parece estar de acuerdo con esta definición:

A diferencia de plantillas de función, cuando crear instancias de una plantilla de clase, que debe crear una instancia de forma explícita la clase dando los argumentos a favor las plantillas de la clase .

[...]

El compilador genera código para una clase plantilla o función cuando se crea una instancia de la clase o función.

1

Una búsqueda rápida produjo:

Q: ¿Hay una diferencia entre una plantilla de función y una función de plantilla , o entre una plantilla de clase y una clase plantilla?

A: El término "plantilla de función" hace referencia a un tipo de plantilla. El término "función de plantilla" se usa a veces para referirse a lo mismo , y en ocasiones para significar una función instanciada desde una plantilla de función. Esta ambigüedad es mejor evitarla usando "plantilla de función" para el primero y algo como como "instancia de plantilla de función" o "instancia de una plantilla de función " para este último. Tenga en cuenta que una plantilla de función no es una función. La misma distinción se aplica a "plantilla de clase" frente a "clase de plantilla".

Tiene sentido para mí.

+2

Enlace? :) No sé RANDOM-INTERNET-SITE-HERE de RANDOM-INTERNET-SITE-HERE! : P –

+0

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

0

Yo personalmente no haría la corrección, pero puedo ver la lógica detrás de esto. No es diferente a llamar a una superclase una subclase o viceversa. Lo que están diciendo es inherentemente incorrecto, y no significa lo mismo.

Es importante, especialmente con los programadores más jóvenes, pensar en términos de código, y eso no es posible cuando traduces incorrectamente el idioma al inglés.

+0

Hmm ... estoy totalmente en desacuerdo con la analogía de que es como sub/superclase. Si mezclas esos dos, la confusión es casi inevitable. Si mezcla "plantilla de clase" y "clase de plantilla", la confusión casi nunca ocurre. –

+0

@Billy: tal vez la analogía es un caso demasiado fuerte, pero la idea aún se mantiene ... olvidar la diferencia entre cuándo usar la palabra sub y cuándo usar super es un error común entre los programadores junior, probablemente solo debido a su visual semejanza. No estoy diciendo que me preocupe que cause confusión, sino que creo que le está haciendo un favor a alguien y ayudando a sus habilidades si se aclara la diferencia. –

Cuestiones relacionadas