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