Plantillas de función miembro
La plantilla del miembro del término hace referencia a las plantillas de función miembro y las plantillas de clase anidada.Las plantillas de función miembro son funciones de plantilla que son miembros de una clase o una plantilla de clase.Para obtener más información, vea Plantillas de clase anidada.
Las funciones miembro pueden ser plantillas de función en varios contextos.Todas las funciones de las plantillas de clase son genéricas pero no se conocen como las plantillas de miembro o plantillas de función miembro.Si estas funciones miembro tienen sus propios argumentos de plantilla, se consideran plantillas de función miembro.Para obtener información detallada, vea Funciones miembro de clases de plantilla.
Ejemplo
Las plantillas de función miembro que no es de plantilla o clases de plantilla se declaran como plantillas de función con sus parámetros de plantilla.
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {}
};
int main()
{
int i;
X* x = new X();
x->mf(&i);
}
El ejemplo siguiente se muestra una plantilla de función miembro de una clase de plantilla.
// member_function_templates2.cpp
template<typename T>
class X
{
public:
template<typename U>
void mf(const U &u)
{
}
};
int main()
{
}
Además, en Visual Studio .NET 2003 y versiones posteriores, las plantillas de miembro también pueden estar fuera de definido de una clase.
// 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()
{
}
Las clases locales no se permiten tener plantillas de miembro.
Las funciones de la plantilla de miembro no pueden ser funciones virtuales y no pueden invalidar funciones virtuales de una clase base cuando se declaran con el mismo nombre que una función virtual de clase base.
Compatibilidad introducido de Visual C++ .NET 2003 para las conversiones definidas por el usuario con plantilla.El siguiente ejemplo funciona en Visual C++ .NET 2003 según el estándar.
// 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>.
}