Compartir a través de


Creación de instancias explícita

Puede utilizar la creación de instancias explícita para crear una instancia de una clase o una función con plantilla sin usarla realmente en el código. Dado que resulta útil al crear archivos de biblioteca (.lib) que usan plantillas para la distribución, las definiciones de plantilla no inicializadas no se colocan en archivos de objeto (.obj).

Ejemplos

Este código crea explícitamente instancias de MyStack para las variables int y seis elementos:

template class MyStack<int, 6>;

Esta instrucción crea una instancia de MyStack sin reservar ningún almacenamiento para un objeto. Se genera el código para todos los miembros.

La línea siguiente crea explícitamente instancias solo de la función miembro de constructor:

template MyStack<int, 6>::MyStack( void );

Puede crear instancias explícitas de plantillas de función mediante un argumento de tipo específico para volver a declararlas, como se muestra en el ejemplo de creación de instancias de plantilla de función.

Puede usar la palabra clave extern para impedir la creación automática de instancias de miembros. Por ejemplo:

extern template class MyStack<int, 6>;

Del mismo modo, puede marcar determinados miembros como externos y no crear instancias de ellos:

extern template MyStack<int, 6>::MyStack( void );

Puede usar la palabra clave extern para impedir que el compilador genere el mismo código de creación de instancias en más de un módulo de objeto. Debe crear una instancia de la plantilla de función mediante los parámetros de plantilla explícitos especificados en al menos un módulo vinculado si se llama a la función. De lo contrario, obtendrá un error del enlazador cuando se compila el programa.

Nota:

La palabra clave extern en la especialización solo se aplica a las funciones de miembro definidas fuera del cuerpo de la clase. Las funciones definidas dentro de la declaración de clase se consideran funciones insertadas y siempre se crean instancias de ellas.

Consulte también

Plantillas de función