Windows-Laufzeit und verwaltete Vorlagen (Komponentenerweiterungen für C++)

Vorlagen können Sie einen Prototyp zum Definieren von der Common Language Runtime oder Laufzeit Fenster und anschließend Variationen dieses Typs instanziiert werden, weil sie unterschiedliche Vorlagen Typparameter verwenden.

Alle Laufzeiten

Sie können Vorlagen vom Wert oder Verweistypen erstellen.Weitere Informationen zum Erstellen des Werts oder Verweistypen finden Sie unter Klassen und Strukturen (Komponentenerweiterungen für C++).

Weitere Informationen dazu finden Sie unter KlassenvorlagenStandard-C++-Klassenvorlagen.

Windows Laufzeit

(Es gibt keine Hinweise für diese Sprachfunktion, die nur für Windows gelten die Common Language Runtime).

ms177213.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /ZW

Common Language Runtime

Es gibt einige Einschränkungen für die Erstellung von Klassenvorlagen von verwalteten Typen, die in den folgenden Codebeispielen veranschaulicht werden.

ms177213.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /clr

ms177213.collapse_all(de-de,VS.110).gifBeispiele

Beispiel

Es ist möglich, einen generischen Typ mit einem Vorlagenparameter des verwalteten Typs zu instanziieren, sondern eine verwaltete Vorlage mit einem Vorlagenparameter des generischen Typs nicht instanziieren.Dies liegt daran, dass generische Typen zur Laufzeit aufgelöst werden.Weitere Informationen finden Sie unter Generika und Vorlagen (Visual C++).

// managed_templates.cpp
// compile with: /clr /c

generic<class T> 
ref class R; 

template<class T> 
ref class Z {
   // Instantiate a generic with a template parameter.
   R<T>^ r;    // OK
};

generic<class T> 
ref class R {
   // Cannot instantiate a template with a generic parameter.
   Z<T>^ z;   // C3231
};

Beispiel

Ein generischer Typ oder eine Funktion kann nicht in einer verwalteten Vorlage geschachtelt werden.

// managed_templates_2.cpp
// compile with: /clr /c

template<class T> public ref class R {
   generic<class T> ref class W {};   // C2959
};

Beispiel

Sie können die Vorlagen nicht zugreifen, die in einer Assembly, auf die verwiesen wird, mit Sprachen C++-/CLI Syntax definiert werden. Sie können jedoch mithilfe der Reflektion.Wenn die Vorlage nicht instanziiert wurde, wird sie nicht in Metadaten ausgegeben.Wenn die Vorlage instanziiert wird, nur Memberfunktionen, auf das verwiesen wird, in den Metadaten angezeigt werden.

// managed_templates_3.cpp
// compile with: /clr

// Will not appear in metadata.
template<class T> public ref class A {};

// Will appear in metadata as a specialized type.
template<class T> public ref class R {
public:
   // Test is referenced, will appear in metadata
   void Test() {}

   // Test2 is not referenced, will not appear in metadata
   void Test2() {}
};

// Will appear in metadata.
generic<class T> public ref class G { };

public ref class S { };

int main() {
   R<int>^ r = gcnew R<int>;
   r->Test();
}

Beispiel

Sie können den verwalteten Modifizierer einer Klasse in einer teilweisen Spezialisierung oder der expliziten Spezialisierung einer Klassenvorlage ändern.

// managed_templates_4.cpp
// compile with: /clr /c

// class template
// ref class
template <class T>
ref class A {};

// partial template specialization
// value type
template <class T>
value class A <T *> {};

// partial template specialization
// interface
template <class T> 
interface class A<T%> {};

// explicit template specialization
// native class
template <>
class A <int> {};

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen