Instancia de una plantilla de clase
A diferencia de las plantillas de función, al crear una instancia de una plantilla de clase, debe crear instancias explícitamente la clase proporcionando argumentos para las plantillas de clase.para crear una instancia de TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
El compilador genera código para una función o clase de plantilla cuando se crea una instancia de la clase o la función.Se crea una función miembro cuando se llama a, y se crea una función miembro virtual cuando se construye la clase.Esto puede producir problemas si está compilando una biblioteca con plantillas para otros usuarios.Para obtener más información, vea Creación de instancias explícita.
Una plantilla de clase primero es especializada y luego crear instancias por el compilador.El compilador no crea instancias de la plantilla de clase hasta que una referencia a un miembro de esta clase de plantilla se cree, sizeof se utiliza en la clase, o se crea una instancia.
Una especialización explícita de una plantilla es una versión personalizada de la plantilla para un tipo determinado.
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
la especialización explícita sin template<> generará un error.las versiones de Visual C++ antes de Visual C++ .NET 2003 aceptaron esta sintaxis:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
Si una plantilla se crea explícitamente instancias o sirve para una vez, no puede explícitamente crear instancias ni especializado una segunda vez en el mismo programa para el mismo conjunto de argumentos.Otras especializaciones con varios argumentos de plantilla se permiten.
Si no hay una instancia o una especialización explícita para un argumento determinado de plantilla, la plantilla se creará instancias implícitamente en el punto donde primero se utiliza.
Porque las distintas instancias de la misma plantilla son diferentes tipos, miembros estáticos de una especialización o instancia de una plantilla es independiente de los miembros estáticos para otra especializa o instancias de la misma plantilla.