Instanciação de modelo de classe
Ao contrário dos modelos de função, ao instanciar um modelo de classe, você deve explicitamente instanciar a classe, oferecendo os argumentos para os modelos de classe.Para criar uma instância de TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
O compilador gera código para uma classe de modelo ou uma função quando a função ou classe é instanciada.Uma função de membro é instanciada quando ele é chamado, e uma função de membro virtual é instanciada quando sua classe é construída.Isso pode causar problemas se você estiver criando uma biblioteca de modelos para outros usuários.Para obter mais informações, consulte Instanciação explícita.
Um modelo de classe é especializado primeiro e, em seguida, instanciado pelo compilador.O compilador não instanciar o modelo de classe até que uma referência a um membro dessa classe de modelo é feita, sizeof é usado na classe ou uma instância é criada.
Uma especialização explícita de um modelo é uma versão personalizada do modelo para um determinado tipo.
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
Especialização explícita sem template<> produzirá um erro.Versões do Visual C++ antes do Visual C++.NET 2003 aceitou esta sintaxe:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
Se um modelo é instanciado ou especializado de uma vez explicitamente, ele não pode ser explicitamente instanciado ou especializado de uma segunda vez no mesmo programa para o mesmo conjunto de argumentos de modelo.São permitidas mais especializações com argumentos de modelo diferente.
Se não houver uma instanciação explícita ou especialização para um argumento de modelo específico, o modelo será instanciado implicitamente no ponto onde ele é usado pela primeira vez.
Como instanciações diferentes do mesmo modelo são os diferentes tipos, membros estáticos para uma especialização ou instanciação de um modelo são separados dos membros estáticos para uma especialização diferente ou a instanciação do mesmo modelo.