Estoy leyendo un código fuente en stl_construct.h, En la mayoría de los casos tiene algo en el <> y veo algunas líneas con solo "template<> ...
". ¿Qué es esto?¿Qué significa la plantilla <> (sin ninguna clase T en el <>)?
Respuesta
Esto significa que lo que sigue es un template specialization.
Adivina, leí completamente la Q y respondí algo que no se me había preguntado.
Así que aquí le pide al contestar Q:
Es un Explicit Specialization con una lista de argumentos plantilla vacía.
Al crear una instancia de una plantilla con un conjunto dado de argumentos de plantilla, el compilador genera una nueva definición basada en esos argumentos de plantilla. Pero existe la posibilidad de anular este comportamiento de generación de definiciones. En lugar de que el compilador genere la definición, podemos especificar la definición que el compilador debería usar para un conjunto determinado de argumentos de plantilla. Esto se llama especialización explícita.
El prefijo template<>
indica que la siguiente declaración de plantilla no contiene parámetros de plantilla.
especialización explícita se puede aplicar a:
- función o plantilla de clase
- función miembro de una plantilla de clase
- miembro de datos estático de una plantilla de clase
- clase miembro de una plantilla de clase
- plantilla de función de miembro de una plantilla de clase &
- clase de miembro te mplate de una plantilla de clase
Es una especialización de plantilla donde todos los parámetros de la plantilla están completamente especificados, y no quedan parámetros en el <>
.
Por ejemplo:
template<class A, class B> // base template
struct Something
{
// do something here
};
template<class A> // specialize for B = int
struct Something<A, int>
{
// do something different here
};
template<> // specialize both parameters
struct Something<double, int>
{
// do something here too
};
- 1. ¿Qué significa <>?
- 2. ¿Cuál es la diferencia entre "plantilla <class T>" y "plantilla <typename T>"?
- 3. ¿Qué significa la plantilla <unsigned int N>?
- 4. Refactorando Func <T> en la Expresión <Func<T>>
- 5. return Queryable <T> o List <T> en un Repository <T>
- 6. Acción <T> o Acción <in T>?
- 7. En C++, ¿qué significa la plantilla <>?
- 8. ¿Por qué es Func <T> ambiguo con Func <IEnumerable <T>>?
- 9. ¿Qué significa ">>" y "<<" en Javascript?
- 10. IEnumerable <T> VS VS IList <T> IQueryable <T>
- 11. Tratar Enumeración <T> como Iterator <T>
- 12. <?> vs <T>
- 13. <out T> vs <T> en Genericos
- 14. La sintaxis <T se extiende Clase <T>> en Java
- 15. C# Ejecución IEquatable <T> .Equal <T>
- 16. Queue <T> vs List <T>
- 17. Func <T> sin el parámetro
- 18. Diferencias entre .CreateObjectSet <T>,. Set <T> y .CreateQuery <T>?
- 19. SortedSet <T> vs HashSet <T>
- 20. IEnumerable <T> y IQueryable <T> aclaración?
- 21. WPF ObservableCollection <T> vs BindingList <T>
- 22. ¿Por qué TypeToken de guayaba <T> .getRawType() devuelven Clase <? super T> en lugar de clase <T>
- 23. ¿Por qué la lista <T> implementa IList <T>, ICollection <T> e IEnumerable <T>?
- 24. ¿Por qué EnumMap <T> .keySet() devuelve un conjunto <T>() y no un EnumSet <T>()?
- 25. ¿Qué significa la clase <?> en Java?
- 26. ¿Qué significa <T> (corchetes angulares) en Java?
- 27. IList <T> a ObservableCollection <T>
- 28. IList <T> a IQueryable <T>
- 29. <T> para implementar IQueryable <T>
- 30. Ejecución de clase con <T>