Modelos de função de membro
O modelo de membro do termo refere-se para os modelos de classe aninhada e modelos de função de membro.Modelos de função de membro são funções de modelo que são membros de uma classe ou um modelo de classe.Para obter mais informações, consulte Modelos de classe aninhada.
Funções de membro podem ser modelos de função em vários contextos.Todas as funções de modelos de classe são genéricas, mas não são chamadas de modelos de membro ou modelos de função de membro.Se essas funções de membro tirar seus próprios argumentos de modelo, eles são considerados modelos de função de membro.Para obter detalhes, consulte Funções de membro de Classes de modelo.
Exemplo
Os modelos de função de membro das classes nontemplate ou modelo são declarados como modelos de função com seus parâmetros de modelo.
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {}
};
int main()
{
int i;
X* x = new X();
x->mf(&i);
}
O exemplo a seguir mostra um membro de modelo de função de uma classe de modelo.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
Além disso, em Visual Studio.NET 2003 e posterior, modelos também podem ser definidos fora de uma classe de membro.
// defining_member_templates_outside_class.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u);
};
template<typename T> template <typename U>
void X<T>::mf(const U &u)
{
}
int main()
{
}
Classes de locais não são permitidos para que os modelos de membro.
Funções do modelo de membro não podem ser funções virtuais e não podem substituir funções virtuais de uma classe base quando eles são declarados com o mesmo nome de uma função virtual da classe base.
Visual C++.NET 2003 introduziu o suporte para modelado conversões definidas pelo usuário.O exemplo a seguir funciona em Visual C++.NET 2003, conforme especificado no padrão.
// templated_user_defined_conversions.cpp
template <class T>
struct S
{
template <class U> operator S<U>()
{
return S<U>();
}
};
int main()
{
S<int> s1;
S<long> s2 = s1; // Convert s1 using UDC and copy constructs S<long>.
}