C++/CX
C++/CX (C++ komponenttillägg) är en språkprojektion för Microsofts Windows Runtime- plattform. Det har formen av ett språktillägg för C++ -kompilatorer , och det gör det möjligt för C++-programmerare att skriva program som anropar Windows Runtime (WinRT) API :er . C++/CX ersätts av C++/WinRT- språkprojektionen, som inte är en förlängning av C++-språket; snarare är det ett helt standard modernt ISO C++17 header-fil-baserat bibliotek.
Språktilläggen lånar syntax från C++/CLI men riktar sig till Windows Runtime Universal Windows Platforms ursprungliga kod istället för Common Language Runtime och hanterad kod . Den ger en uppsättning syntax- och biblioteksabstraktioner som projicerar COM :s WRL-delmängdsbaserade WinRT- programmeringsmodell på ett sätt som är intuitivt för C++/CLI-hanterade tilläggskodare.
Det är möjligt att anropa Windows Runtime från inbyggt ISO C++ via den lägre nivån Windows Runtime C++ Template Library (WRL). WRL ersätts dock också av C++/WinRT .
Syntax för tillägg
C++/CX introducerar syntaxtillägg för programmering för Windows Runtime. Den övergripande icke-plattformsspecifika syntaxen är kompatibel med C++11- standarden.
Föremål
WinRT-objekt skapas, eller aktiveras , med ref new
och tilldelas variabler som deklareras med ^
(hat)-notationen som ärvts från C++/CLI.
Foo ^ foo = ref ny Foo ();
En WinRT-variabel är helt enkelt ett par av en pekare till virtuell metodtabell och pekare till objektets interna data .
Referensräkning
Ett WinRT-objekt är referensräknat och hanterar därmed på samma sätt som vanliga C++-objekt inneslutna i shared_ptrs . Ett objekt kommer att raderas när det inte finns några kvarvarande referenser som leder till det.
Det är ingen sophämtning inblandad. Ändå har nyckelordet gcnew reserverats för eventuell framtida användning.
Klasser
Runtime klasser
Det finns speciella typer av körtidsklasser som kan innehålla komponentförlängningskonstruktioner. Dessa kallas helt enkelt ref-klasser eftersom de deklareras med ref-klass
.
public ref class MyClass { };
Delklasser
C++/CX introducerar begreppet partiella klasser . Funktionen gör att en enda klassdefinition kan delas upp över flera filer, främst för att göra det möjligt för XAML grafiska användargränssnittsdesignverktyg att automatiskt generera kod i en separat fil för att inte bryta logiken som skrivits av utvecklaren. Delarna slås senare samman vid sammanställning.
.NET-språk som C# har haft denna funktion i många år. Partiella klasser har ännu inte kommit in i C++ -standarden och kan därför inte användas, inte ens i C++20 .
En fil som genereras och uppdateras av GUI-designern och därför inte bör modifieras av programmeraren. Notera nyckelordet partiell
.
// foo.private.h #pragma en gång partiell ref klass foo { privat : int id_ ; Plattform :: String ^ name_ ; };
Filen där programmeraren skriver logik för användargränssnittet. Rubriken i vilken den kompilatorgenererade delen av klassen är definierad importeras. Observera att nyckelordet partiell
inte är nödvändigt.
// foo.public.h #pragma en gång #inkludera "foo.private.h" ref klass foo { public : int GetId (); Plattform :: String ^ GetName (); };
Det här är filen där medlemmarna i den partiella klassen är implementerade.
// foo.cpp #include "pch.h" #include "foo.public.h" int foo::GetId () { return id_ ;} Plattform :: String ^ foo :: GetName { return name_ ;}
Generika
Windows Runtime och därmed C++/CX stöder runtime-baserade generika . Generisk typinformation finns i metadata och instansieras vid körning, till skillnad från C++-mallar som är kompileringstidskonstruktioner. Båda stöds av kompilatorn och kan kombineras.
generisk < typnamn T > public ref class bag { property T Artikel ; };
Metadata
Alla WinRT-program exponerar sina deklarerade klasser och medlemmar genom metadata . Formatet är detsamma som standardiserades som en del av Common Language Infrastructure (CLI), standarden skapad från .NET Framework . På grund av detta kan kod delas mellan C++/CX, CLI-språk och JavaScript som riktar sig till Windows Runtime.
Körtidsbibliotek
C++/CX har en uppsättning bibliotek som riktar sig till Windows Runtime. Dessa hjälper till att överbrygga funktionaliteten hos C++ Standard Library och WinRT.
Förprocessorbaserad detektering
Du kan upptäcka om C++/CX-tillägget är aktiverat genom att testa förekomsten av __cplusplus_winrt
-förprocessorsymbolen.
#ifdef __cplusplus_winrt // C++/CX-specifik kod går här... #endif
Se även
externa länkar
- Inuti C++/CX Design - Visual C++ Team Blog
- GoingNative 3: C++/CX-avsnittet med Marian Luparu - Kanal 9
- WinRT och winmd Files - Marius Bancilas blogg
- Visuell C++ språkreferens (C++/CX)