Compartir a través de


Plantillas de función miembro

El término plantilla de miembro se refiere tanto a las plantillas de función miembro como a las plantillas de clase anidada. Las plantillas de función miembro son plantillas de función que son miembros de una plantilla de clase o clase.

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 plantillas de miembro o plantillas de función miembro. Si estas funciones miembro toman sus propios argumentos de plantilla, se consideran plantillas de función miembro.

Ejemplo: Declaración de plantillas de función miembro

Las plantillas de función miembro de clases que no son de plantilla o plantillas de clase 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);
}

Ejemplo: Plantilla de función miembro de una plantilla de clase

En el ejemplo siguiente se muestra una plantilla de función miembro de una plantilla de clase.

// member_function_templates2.cpp
template<typename T>
class X
{
public:
   template<typename U>
   void mf(const U &u)
   {
   }
};

int main()
{
}

Ejemplo: Definición de plantillas de miembro fuera 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()
{
}

Ejemplo: Conversión con plantilla definida por el usuario

No se permite que las clases locales tengan plantillas de miembro.

Las plantillas de función miembro no pueden ser funciones virtuales. Además, no pueden invalidar las funciones virtuales de una clase base cuando se declaran con el mismo nombre que una función virtual de clase base.

En el ejemplo siguiente se muestra una conversión definida por el usuario con plantilla:

// 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>.
}

Consulte también

Plantillas de función