Instanciação explícita

Você pode usar uma criação de instanciação explícita para criar uma instanciação de uma classe ou função com modelo sem realmente usá-la no código. Como é útil quando você está criando arquivos de biblioteca () que usam modelos para distribuição, as definições de modelo não instanciadas não são colocadas em arquivos de objeto (.lib.obj).

Exemplos

Esse código cria explicitamente instanciações de MyStack para variáveis int e seis itens:

template class MyStack<int, 6>;

Essa instrução cria uma instanciação de MyStack sem reservar nenhum armazenamento para um objeto. O código é gerado para todos os membros.

A linha a seguir cria instanciações explicitamente somente para a função membro do construtor:

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

Você pode instanciar explicitamente modelos de função usando um argumento de tipo específico para redeclará-los, conforme mostrado no exemplo em Instanciação de modelo de função.

Você pode usar a palavra-chave extern para impedir a criação automática de instanciações de membros. Por exemplo:

extern template class MyStack<int, 6>;

De forma semelhante, você pode marcar membros específicos como sendo externos e sem instanciação:

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

Você pode usar a palavra-chave extern para impedir que o compilador gere o mesmo código de criação de instanciação em mais de um módulo de objeto. Você deve instanciar o modelo de função usando os parâmetros de modelo explícitos especificados em pelo menos um módulo vinculado se a função for chamada. Caso contrário, você receberá um erro de vinculador quando o programa for criado.

Observação

A palavra-chave extern na especialização se aplica somente a funções de membro definidas fora do corpo da classe. As funções definidas na declaração de classe são consideradas funções embutidas e sempre têm instanciações.

Confira também

Modelos de função