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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de