Udostępnij za pośrednictwem


Środowisko wykonawcze systemu Windows i zarządzane szablony (C++ Component Extensions)

Szablony umożliwiają zdefiniowanie prototyp obsługi Windows lub wspólne language runtime typu, a następnie utworzyć wystąpienia zmian tego typu za pomocą parametrów typu inny szablon.

Wszystkie środowiska wykonawcze

Można utworzyć szablony z typów wartości lub odwołania. Aby uzyskać więcej informacji na temat tworzenia typów wartości lub odwołania, zobacz Klasy i struktury (C++ Component Extensions).

Aby uzyskać więcej informacji na temat standardowych szablonów klasy języka C++, zobacz Szablony klas.

Środowisko wykonawcze systemu Windows

(Nie ma żadnych uwag dla tej funkcji języka, które mają zastosowanie do Środowiska wykonawczego systemu Windows.)

Wymagania

Opcja kompilatora: /ZW

Środowisko uruchomieniowe języka wspólnego

Istnieją pewne ograniczenia na tworzenie szablonów klas z typy zarządzane, które są wykazane w następujących przykładach kodu.

Wymagania

Opcja kompilatora: /clr

Przykłady

Przykład

Istnieje możliwość tworzenia wystąpienia typu rodzajowego z parametrem szablonu typu zarządzanego, ale nie można utworzyć wystąpienia zarządzanych szablon z parametrem szablonu typu rodzajowego. Jest tak, ponieważ typy rodzajowe są rozpoznawane w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Typy ogólne i szablony (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
};

Przykład

Typ rodzajowy lub funkcja nie może być zagnieżdżone w szablonie zarządzanych.

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

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

Przykład

Nie masz dostępu do szablonów zdefiniowane w odwołanie zestawu z C + +/ składni języka interfejsu wiersza polecenia, ale można użyć odbicie. Jeśli szablon nie zostanie uruchomiony, nie jest emitowana w metadanych. Jeśli szablon zostanie uruchomiony, tylko funkcje składowe odwołanie pojawią się w metadanych.

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

Przykład

Można zmienić zarządzanych modyfikator klasy w częściowa specjalizacja lub jawne specjalizacja szablonu klasy.

// 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> {};

Zobacz też

Koncepcje

Component Extensions dla platform środowiska uruchomieniowego