2011-04-25 16 views
6

¿Cuál es la diferencia entre escribir una plantilla en C++ en el siguiente ambos sentidosplantillas en C++, nombre de tipo y clase

template<typename T> & template<class T>

y cuando es lo que ellos prefieren por encima de uno al otro? Si ambos son iguales, ¿por qué los tenemos ambos si uno es suficiente?

+0

prefiero 'typename' porque mis plantillas aceptan tipos sin clase (pero sí, son exactamente equivalentes, por supuesto) – Cubbi

+0

posible duplicado de [C++ diferencia de las palabras clave 'nombre de tipo' y 'clase' en las plantillas ] (http://stackoverflow.com/questions/2023977/c-difference-of-keywords-typename-and-class-in-templates) – Matt

Respuesta

9

Sin diferencia en absoluto. Prefiero el primero (principalmente), pero ese es mi gusto personal. El idioma no hace ninguna diferencia entre ellos.

Para los parámetros de plantilla, las palabras clave typename y class son equivalentes. §14.1.2 dice:

No hay ninguna diferencia semántica entre clase y nombre de tipo en una plantilla de parámetros .


Si ambos son iguales, entonces ¿por qué tenemos a los dos si uno es suficiente?

Stan Lippman explica esto en su artículo:

Why C++ Supports both Class and Typename for Type Parameters?

+0

Se puede encontrar más información [en esta publicación de blog] (http: // blogs. msdn.com/b/slippman/archive/2004/08/11/212768.aspx). – orlp

+0

Este enlace puede ser útil http://pages.cs.wisc.edu/~driscoll/typename.html –

Cuestiones relacionadas