Freigeben über


Memberfunktionsvorlagen

Der Ausdruck "Membervorlage" bezieht sich auf Memberfunktionsvorlagen und geschachtelte Klassenvorlagen. Memberfunktionsvorlagen sind Funktionsvorlagen, die Member einer Klasse oder Klassenvorlage sind.

Memberfunktionen können in mehreren Kontexten Funktionsvorlagen sein. Alle Funktionen von Klassenvorlagen sind generisch, werden jedoch nicht als Membervorlagen oder Memberfunktionsvorlagen bezeichnet. Wenn diese Memberfunktionen eigene Vorlagenargumente verwenden, gelten sie als Memberfunktionsvorlagen.

Beispiel: Deklarieren von Memberfunktionsvorlagen

Memberfunktionsvorlagen von Nicht-Vorlagenklassen oder Klassenvorlagen werden als Funktionsvorlagen mit ihren Vorlagenparametern deklariert.

// member_function_templates.cpp
struct X
{
   template <class T> void mf(T* t) {}
};

int main()
{
   int i;
   X* x = new X();
   x->mf(&i);
}

Beispiel: Memberfunktionsvorlage einer Klassenvorlage

Das folgende Beispiel zeigt eine Memberfunktionsvorlage einer Klassenvorlage.

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

int main()
{
}

Beispiel: Definieren von Membervorlagen außerhalb der Klasse

// 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()
{
}

Beispiel: Benutzerdefinierte Vorlagenkonvertierung

Lokale Klassen dürfen keine Membervorlagen haben.

Memberfunktionsvorlagen können keine virtuellen Funktionen sein. Und sie können virtuelle Funktionen nicht aus einer Basisklasse außer Kraft setzen, wenn sie mit demselben Namen wie eine virtuelle Basisklasse deklariert werden.

Das folgende Beispiel zeigt eine benutzerdefinierte Vorlagenkonvertierung:

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

Siehe auch

Funktionsvorlagen