Sdílet prostřednictvím


Windows Runtime a spravované šablony (rozšíření komponent C++)

Šablony umožňují definovat prototyp Windows Runtime nebo typu modul CLR (Common Language Runtime) a potom variace typu konkretizovat pomocí parametrů typu jinou šablona .

Všechny knihovny runtime

Můžete vytvořit šablony z typů hodnotu nebo odkazovat se .Další informace o vytváření typů hodnotu nebo odkazovat se , viz Třídy a struktury (rozšíření komponent C++).

Další informace o standardní šablony třída jazyka C++, viz Šablony třídy.

Runtime v systému Windows

(Existují žádné poznámky pro tento jazyk funkce dané párovat Windows Runtime).

ms177213.collapse_all(cs-cz,VS.110).gifPožadavky

Volba kompilátoru:/ZW

Modul CLR (Common Language Runtime)

Existují určitá omezení k vytvoření šablony třída ze spravovaných typů, které se prokáže, že v následujících příkladech kódu.

ms177213.collapse_all(cs-cz,VS.110).gifPožadavky

Volba kompilátoru:/clr

ms177213.collapse_all(cs-cz,VS.110).gifPříklady

Příklad

Je možné vytvořit instanci obecný typ s šablonaspravované typparametr, ale nelze vytvořit instanci spravované šablona sšablona. Je to proto, že obecné typy, které jsou vyřešeny v době běhu.Další informace naleznete v tématu Generics a šablon (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
};

Příklad

obecný typ nebo funkce nemůže být vnořen v spravované šablona.

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

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

Příklad

Nelze získat přístup k šablon definované v odkazované sestavení s C + +/ CLI syntaxe jazyka, ale můžete použít reflexe.Pokud šablona není konkretizováno, není emitovány v metadata.Pokud vytváření instance šablona , zobrazí se pouze odkazované členské funkce v metadata.

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

Příklad

Můžete změnit spravované modifikátor částečný kód specializace nebo explicitní specializace třídašablona třída .

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

Viz také

Koncepty

Součást rozšíření pro Runtime platformy