Modèles de fonction membre
Le modèle membre de terme fait référence aux deux modèles de fonction membre et modèles de classe imbriqués.Les modèles de fonction membre sont des fonctions de modèle qui sont membres d'une classe ou d'un modèle de classe.Pour plus d'informations, consultez modèles de classe imbriqués.
Les fonctions membres peuvent être des modèles de fonction dans plusieurs contextes.Toutes les fonctionnalités des modèles de classe sont génériques mais pas appelés modèles membres ou les modèles de fonction membre.Si ces fonctions membres prennent leurs propres arguments template, elles sont considérées comme des modèles de fonction membre.Pour plus d'informations, consultez Fonctions membres de classes de modèle.
Exemple
Les modèles de fonction membre non basé sur des modèles ou des classes de modèle sont déclarés comme modèles de fonctions avec leurs paramètres de modèle.
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {}
};
int main()
{
int i;
X* x = new X();
x->mf(&i);
}
L'exemple suivant illustre un modèle de fonction membre d'une classe de modèle.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
En outre, dans Visual Studio .NET 2003 et versions ultérieures, les modèles de membres peuvent également être définis en dehors d'une classe.
// 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()
{
}
Il ne permet pas aux les classes locales pour que les modèles de membres.
Les fonctions membres de modèles ne peuvent pas être des fonctions virtuelles et ne peuvent pas substituer les fonctions virtuelles d'une classe de base lorsqu'elles sont déclarées avec le même nom qu'une fonction virtuelle de classe de base.
Prise en charge introduit de Visual C++ .NET 2003 des conversions définies par l'utilisateur avec modèles.L'exemple suivant fonctionne dans Visual C++ .NET 2003 comme spécifié dans le standard.
// 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>.
}