Środowisko wykonawcze systemu Windows i zarządzane szablony (C++/CLI i C++/CX)

Szablony umożliwiają zdefiniowanie prototypu środowisko wykonawcze systemu Windows lub typu środowiska uruchomieniowego języka wspólnego, a następnie utworzenie wystąpienia odmian tego typu przy użyciu różnych parametrów typu szablonu.

Wszystkie środowiska wykonawcze

Szablony można tworzyć na podstawie wartości lub typów referencyjnych. Aby uzyskać więcej informacji na temat tworzenia wartości lub typów odwołań, zobacz Klasy i struktury.

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

Środowisko wykonawcze systemu Windows

(Nie ma żadnych uwag dotyczących tej funkcji językowej, które mają zastosowanie tylko do środowisko wykonawcze systemu Windows).

Wymagania

Opcja kompilatora: /ZW

środowiska uruchomieniowe w trakcie wykonania

Istnieją pewne ograniczenia dotyczące tworzenia szablonów klas na podstawie typów zarządzanych, które przedstawiono w poniższych przykładach kodu.

Wymagania

Opcja kompilatora: /clr

Przykłady

Istnieje możliwość utworzenia wystąpienia typu ogólnego przy użyciu parametru szablonu typu zarządzanego, ale nie można utworzyć wystąpienia szablonu zarządzanego przy użyciu parametru szablonu typu ogólnego. Dzieje się tak, ponieważ typy ogólne są rozwiązywane w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Ogólne i szablony (C++/CLI).

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

Nie można zagnieżdżać typu ogólnego lub funkcji w szablonie zarządzanym.

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

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

Nie można uzyskać dostępu do szablonów zdefiniowanych w zestawie, do którego odwołuje się składnia języka C++/CLI, ale można użyć odbicia. Jeśli wystąpienie szablonu nie jest tworzone, nie jest emitowane w metadanych. Jeśli wystąpienie szablonu zostanie utworzone, w metadanych będą wyświetlane tylko przywoływane funkcje składowe.

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

Można zmienić zarządzany modyfikator klasy w częściowej specjalizacji lub jawnej specjalizacji 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ż

Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows