Přehled systému typů (C++/CX)

Pomocí architektury prostředí Windows Runtime můžete k psaní aplikací a komponent použít C++/WinRT, C++/CX, Visual Basic, Visual C# a JavaScript. Můžou přímo přistupovat k rozhraní API pro Windows a spolupracovat s dalšími aplikacemi a komponentami prostředí Windows Runtime. Univerzální platforma Windows aplikace (UPW), které jsou napsané v kompilaci jazyka C++ do nativního kódu, který se spouští přímo v procesoru. Aplikace pro UPW napsané v jazyce C# nebo Visual Basic se kompilují do jazyka MSIL (Microsoft Intermediate Language) a spouštějí se v modulu CLR (Common Language Runtime). Aplikace pro UPW napsané v JavaScriptu se spouštějí v prostředí runtime JavaScriptu. Samotné součásti operačního systému prostředí Windows Runtime jsou napsané v jazyce C++ a běží jako nativní kód. Všechny tyto komponenty a aplikace pro UPW komunikují přímo prostřednictvím binárního rozhraní aplikace prostředí Windows Runtime (ABI).

Pokud chcete povolit podporu prostředí Windows Runtime v moderním idiomu C++, společnost Microsoft vytvořila rozšíření jazyka C++/CX. C++/CX poskytuje integrované základní typy a implementace základních typů prostředí Windows Runtime. Tyto typy umožňují aplikacím a komponentám C++ komunikovat přes ABI s aplikacemi napsanými v jiných jazycích. Aplikace C++/CX můžou využívat libovolný typ prostředí Windows Runtime. Mohou také vytvářet třídy, struktury, rozhraní a další uživatelem definované typy, které mohou využívat jiné aplikace a komponenty UPW. Aplikace pro UPW napsaná v C++/CX může také používat běžné třídy a struktury jazyka C++, pokud nemají veřejnou přístupnost.

Podrobnou diskuzi o projekci jazyka C++/CX a o tom, jak funguje v rámci krytů, najdete v těchto blogových příspěvcích:

Poznámka

I když se jazyk C++/CX stále podporuje, doporučujeme místo toho používat C++/WinRT pro nové aplikace a součásti prostředí Windows Runtime. Je navržená tak, aby vám poskytovala prvotřídní přístup k modernímu rozhraní WINDOWS API. Bez ohledu na název používá C++/WinRT pouze standardní C++17 bez rozšíření. K implementaci projekce jazyka C++ pro prostředí Windows Runtime rozhraní API používá knihovnu jen pro hlavičku. C++/WinRT je k dispozici v sadě Windows SDK verze 1803 (10.0.17134.0) dále.

Soubory metadat Windows (.winmd)

Když zkompilujete aplikaci pro UPW napsanou v jazyce C++, kompilátor vygeneruje spustitelný soubor v nativním strojovém kódu a také vygeneruje samostatný soubor metadat Systému Windows,.winmd který obsahuje popisy veřejných typů prostředí Windows Runtime, které zahrnují třídy, struktury, výčty, rozhraní, parametrizované rozhraní a delegáty. Formát metadat se podobá formátu, který se používá v sestaveních rozhraní .NET Framework. V komponentě .winmd C++ soubor obsahuje pouze metadata. Spustitelný kód je v samostatném souboru. Toto uspořádání používají komponenty prostředí Windows Runtime, které jsou součástí systému Windows. .winmd Název souboru se musí shodovat nebo musí být předponou kořenového oboru názvů ve zdrojovém kódu. (Pro jazyky .winmd rozhraní .NET Framework soubor obsahuje kód i metadata, stejně jako sestavení rozhraní .NET Framework.)

Metadata v .winmd souboru představují publikovanou plochu vašeho kódu. Publikované typy jsou viditelné pro jiné aplikace pro UPW bez ohledu na to, v jakém jazyce jsou tyto ostatní aplikace napsané. Metadata nebo publikovaný kód můžou obsahovat pouze typy určené systémem typů prostředí Windows Runtime. Konstrukty jazyka specifické pro jazyk C++, jako jsou běžné třídy, pole, šablony nebo kontejnery STL (Standard Library) jazyka C++, nemůžete publikovat. Klientská aplikace v JavaScriptu nebo C# by nevěděla, co s nimi dělat.

To, jestli je typ nebo metoda viditelná v metadatech, závisí na tom, jaké modifikátory přístupnosti se na něj použijí. Aby byl typ viditelný, musí být deklarován v oboru názvů a musí být deklarován jako public. Vpublicref class kódu je povolený jiný než interní pomocný typ. V metadatech se prostě nezobrazuje. Dokonce i v public ref class, ne všichni členové jsou nutně viditelné. Následující tabulka uvádí vztah mezi specifikátory přístupu jazyka C++ a public ref classprostředí Windows Runtime viditelnosti metadat:

Publikováno v metadatech Nepublikuje se v metadatech
public private
protected internal
public protected private protected

Obsah souborů můžete zobrazit .winmd pomocí Prohlížeče objektů. V souboru najdete Windows.winmd prostředí Windows Runtime součástí systému Windows. Soubor default.winmd obsahuje základní typy, které se používají v jazyce C++/CX, a platform.winmd obsahuje typy z Platform oboru názvů. Ve výchozím nastavení jsou tyto tři .winmd soubory zahrnuty do každého projektu C++ pro aplikace pro UPW.

Tip

Typy v Platform::Collections oboru názvů se v .winmd souboru nezobrazují, protože nejsou veřejné. Jedná se o privátní implementace rozhraní specifických pro jazyk C++, která jsou definována v Windows::Foundation::Collections. Aplikace prostředí Windows Runtime napsaná v JavaScriptu nebo C# neví, co Platform::Collections::Vector je třída, ale může využívat Windows::Foundation::Collections::IVector. Typy Platform::Collections jsou definovány v collection.h.

prostředí Windows Runtime systému typů v C++/CX

Následující části popisují hlavní funkce systému typů prostředí Windows Runtime a jejich podporu v jazyce C++/CX.

Obory názvů

Všechny typy prostředí Windows Runtime musí být deklarovány v rámci oboru názvů. Samotné rozhraní API systému Windows je uspořádané podle oboru názvů. Soubor .winmd musí mít stejný název jako kořenový obor názvů. Například pojmenovanou třídu A.B.C.MyClass lze vytvořit instanci pouze v případě, že je definovaná v souboru metadat s názvem A.winmd, A.B.winmdnebo A.B.C.winmd. Název knihovny DLL se nevyžaduje, aby odpovídal .winmd názvu souboru.

Samotné rozhraní API systému Windows se znovu vytvořilo jako dobře faktorovaná knihovna tříd, která je uspořádaná podle oborů názvů. Všechny komponenty prostředí Windows Runtime jsou deklarovány v Windows.* oborech názvů.

Další informace naleznete v tématu Obory názvů a viditelnost typů.

Základní typy

Prostředí Windows Runtime definuje následující základní typy: , , , , , UInt32, Int64, UInt64, Single, BooleanChar16Double, a .StringInt32UInt16Int16UInt8 C++/CX podporuje základní číselné typy ve výchozím oboru názvů jako uint16, uint32, , uint64, int16, int32, int64, float32, , a .char16float64 Boolean a String jsou také definovány Platform v oboru názvů.

C++/CX také definuje uint8, což unsigned charnení podporováno v prostředí Windows Runtime a nelze ho použít ve veřejných rozhraních API.

Základní typ může být nullable tak, že ho zabalíte Platform::IBox do rozhraní. Další informace naleznete v tématu Třídy hodnot a struktury.

Další informace o základních typech naleznete v tématu Základní typy

Řetězce

Řetězec prostředí Windows Runtime je neměnná posloupnost 16bitových znaků UNICODE. Řetězec prostředí Windows Runtime se promítá jako Platform::String^. Tato třída poskytuje metody pro výstavbu řetězců, manipulaci a převod na a z wchar_t.

Další informace naleznete v tématu Řetězce.

Pole

Prostředí Windows Runtime podporuje jednorozměrná pole libovolného typu. Pole polí nejsou podporována. V jazyce C++/CX jsou pole prostředí Windows Runtime projektována jako Platform::Array třída.

Další informace najdete v tématech Array a WriteOnlyArray.

ref class a ref struct typy

Třída prostředí Windows Runtime se projektuje v jazyce C++/CX jako ref class typ, ref struct protože je zkopírovaná odkazem. Správa paměti pro ref class objekty a ref struct objekty se zpracovává transparentně prostřednictvím počítání odkazů. Když poslední odkaz na objekt zmizí z rozsahu, objekt se zničí. Typ ref class může ref struct :

  • Obsahují jako konstruktory, metody, vlastnosti a události členů. Tito členové mohou mít public, private, protectednebo internal přístupnost.

  • Může obsahovat privátní vnořené enum, structnebo class definice.

  • Může přímo dědit z jedné základní třídy a může implementovat libovolný počet rozhraní. Všechny ref class objekty jsou implicitně konvertibilní do Platform::Object třídy a mohou přepsat své virtuální metody , Object::ToStringnapříklad .

Aby ref class se zabránilo dalšímu odvození, musí být deklarován jako sealedveřejný konstruktor.

Další informace naleznete v tématu Referenční třídy a struktury

value class a value struct typy

A value class nebo value struct představuje základní datovou strukturu a obsahuje pouze pole, která mohou být value class typy, value struct typy nebo typ Platform::String^. value struct a value class objekty se kopírují podle hodnoty.

Hodnotu Null value struct lze vytvořit tak, že ji zabalíte IBox do rozhraní.

Další informace naleznete v tématu Třídy hodnot a struktury.

Dílčí třídy

Funkce částečné třídy umožňuje definovat jednu třídu přes více souborů. Umožňuje nástroje pro generování kódu, jako je editor XAML, upravovat jeden soubor, aniž byste se museli dotýkat jiného souboru, který upravujete.

Další informace naleznete v tématu Částečné třídy

Vlastnosti

Vlastnost je veřejný datový člen libovolného typu prostředí Windows Runtime. Deklaruje se a definuje pomocí klíčového property slova. Vlastnost se implementuje jako get/set dvojice metod. Klientský kód přistupuje k vlastnosti, jako by šlo o veřejné pole. Vlastnost, která nevyžaduje žádný vlastní get kód, set se označuje jako triviální vlastnost a lze ji deklarovat bez explicitních get nebo set metod.

Další informace naleznete v tématu Vlastnosti.

prostředí Windows Runtime kolekce v C++/CX

Prostředí Windows Runtime definuje sadu rozhraní pro typy kolekcí, které každý jazyk implementuje vlastním způsobem. C++/CX poskytuje implementace ve Platform::Collections::Vector třídě, Platform::Collections::Map třídě a dalších souvisejících typech kolekcí, které jsou kompatibilní s jejich protějšky standardní knihovny jazyka C++.

Další informace naleznete v tématu Kolekce.

Typy šablon ref class

private a internal typy přístupu ref class mohou být šablonovány a specializované.

Další informace naleznete v tématu Šablony ref třídy.

Rozhraní

Rozhraní prostředí Windows Runtime definuje sadu veřejných vlastností, metod a událostí, které ref class musí určitý typ ref struct implementovat, pokud dědí z rozhraní.

Další informace naleznete v tématu Rozhraní.

Výčty

Typ enum class v prostředí Windows Runtime se podobá oboru v enum jazyce C++. Základní typ je int32, pokud není použit atribut [Flags] – v takovém případě je uint32podkladový typ .

Další informace naleznete v tématu Výčty.

Delegáti

Delegát v prostředí Windows Runtime je podobný objektu std::function v jazyce C++. Jedná se o speciální ref class typ, který se používá k vyvolání funkcí poskytovaných klientem, které mají kompatibilní podpisy. Delegáti se nejčastěji používají v prostředí Windows Runtime jako typ události.

Další informace naleznete v tématu Delegáti.

Výjimky

V C++/CX můžete zachytit vlastní typy výjimek, std::exception typy a Platform::Exception typy.

Další informace naleznete v tématu Výjimky.

Události

Událost je veřejný člen v typu ref class delegáta nebo ref struct jeho typ. Událost může být vyvolána pouze vlastní třídou, tj. aktivována. Kód klienta však může poskytovat vlastní funkce obslužné rutiny událostí, které jsou vyvolány při spuštění vlastní třídy událostí.

Další informace naleznete v tématu Události.

Přetypování

C++/CX podporuje standardní operátory static_castpřetypování C++ , dynamic_casta reinterpret_casta také safe_cast operátor specifický pro C++/CX.

Další informace naleznete v tématu Casting.

Zabalení

Boxed variable is a value type that's wrappe in a reference type. V situacích, kdy je vyžadována referenční sémantika, použijte krabicové proměnné.

Další informace najdete v tématu Boxing.

Atributy

Atribut je hodnota metadat, kterou lze použít u libovolného typu prostředí Windows Runtime typu nebo člena typu. Atributy je možné zkontrolovat za běhu. Prostředí Windows Runtime definuje sadu běžných atributů v Windows::Foundation::Metadata oboru názvů. Uživatelem definované atributy ve veřejných rozhraních prostředí Windows Runtime v této verzi nepodporují.

Vyřazení rozhraní API

Veřejná rozhraní API můžete označit jako zastaralá pomocí stejného atributu, který používají typy systému prostředí Windows Runtime.

Další informace najdete v tématu Vyřazení typů a členů.

Viz také

Referenční dokumentace jazyka C++/CX