C++/CX

C++/CX ( rozszerzenia komponentów C++) to projekcja języka dla platformy Microsoft Windows Runtime . Ma postać rozszerzenia języka dla kompilatorów C++ i umożliwia programistom C++ pisanie programów wywołujących interfejsy API Windows Runtime (WinRT) . C++/CX jest zastępowany przez projekcję języka C++/WinRT , która nie jest rozszerzeniem języka C++; jest to raczej całkowicie standardowa, nowoczesna biblioteka oparta na plikach nagłówkowych ISO C++ 17.

Rozszerzenia językowe zapożyczają składnię z języka C++/CLI , ale są ukierunkowane na kod natywny środowiska wykonawczego systemu Windows Universal Windows Platform zamiast środowiska uruchomieniowego języka wspólnego i kodu zarządzanego . Zapewnia zestaw abstrakcji składni i bibliotek, które projektują model programowania WinRT oparty na podzbiorze WRL COM w sposób intuicyjny dla programistów zarządzanych przez C++/CLI rozszerzeń.

Możliwe jest wywołanie środowiska wykonawczego systemu Windows z natywnego ISO C++ za pośrednictwem niższego poziomu biblioteki szablonów środowiska wykonawczego systemu Windows C++ (WRL). Jednak WRL jest również zastępowany przez C++/WinRT .

Składnia rozszerzenia

C++/CX wprowadza rozszerzenia składni do programowania dla środowiska wykonawczego systemu Windows. Ogólna składnia, która nie jest specyficzna dla platformy, jest zgodna ze C++ 11 .

Obiekty

Obiekty WinRT są tworzone lub aktywowane przy użyciu ref new i przypisywane do zmiennych zadeklarowanych z notacją ^ (hat) odziedziczoną z C++/CLI.

      Foo  ^  foo  =  ref  nowy  Foo  (); 

Zmienna WinRT to po prostu para wskaźnika do wirtualnej tabeli metod i wskaźnika do wewnętrznych danych obiektu .

Liczenie referencji

Obiekt WinRT jest liczony w referencjach i dlatego obsługuje go podobnie jak zwykłe obiekty C++ zawarte w shared_ptrs . Obiekt zostanie usunięty, gdy nie będzie żadnych odniesień prowadzących do niego.

Nie ma mowy o wywozie śmieci . Niemniej jednak słowo kluczowe gcnew zostało zarezerwowane do ewentualnego wykorzystania w przyszłości.

Klasy

Klasy wykonawcze

Istnieją specjalne rodzaje klas środowiska wykonawczego , które mogą zawierać konstrukcje rozszerzające komponenty. Są one po prostu określane jako klasy ref , ponieważ są deklarowane przy użyciu ref class .

   


 publiczna  klasa  referencyjna  MojaKlasa  {  }; 
Zajęcia częściowe

C++/CX wprowadza koncepcję klas częściowych . Ta funkcja umożliwia podzielenie definicji pojedynczej klasy na wiele plików, głównie w celu umożliwienia graficznego interfejsu użytkownika XAML automatycznego generowania kodu w oddzielnym pliku, aby nie zepsuć logiki napisanej przez programistę. Części są później łączone podczas kompilacji.

Języki .NET, takie jak C#, mają tę funkcję od wielu lat. Klasy częściowe nie weszły jeszcze do C++ i dlatego nie mogą być używane nawet w C++20 .

Plik, który jest generowany i aktualizowany przez projektanta GUI, a zatem nie powinien być modyfikowany przez programistę. Zwróć uwagę na słowo kluczowe częściowe .




   


    
    
 // foo.private.h  #pragma raz  częściowy  ref  class  foo  {  private  :  int  id_  ;  Platforma  ::  String  ^  nazwa_  ;  }; 

Plik, w którym programista zapisuje logikę interfejsu użytkownika. Importowany jest nagłówek, w którym zdefiniowana jest część klasy wygenerowana przez kompilator. Zauważ, że słowo kluczowe parts nie jest konieczne.



 

  


    
    
 // foo.public.h  #pragma Once  #include  "foo.private.h"  ref  class  foo  {  public  :  int  GetId  ();  Platforma  ::  String  ^  GetName  ();  }; 

Jest to plik, w którym zaimplementowane są składowe klasy częściowej.


 
 

   
    // foo.cpp  #include  "pch.h"  #include  "foo.public.h"  int  foo::GetId  ()  {  return  id_  ;}  Platforma  ::  String  ^  foo  ::  GetName  {  return  name_  ;} 

Generyki

Środowisko wykonawcze systemu Windows, a tym samym C++/CX, obsługuje typy ogólne oparte na środowisku wykonawczym . Informacje o typie ogólnym są zawarte w metadanych i tworzone w czasie wykonywania, w przeciwieństwie do szablonów C++ , które są konstrukcjami w czasie kompilacji. Oba są obsługiwane przez kompilator i można je łączyć.

  
    

       
 rodzajowy  <  nazwa typu  T  >  public  ref  class  bag  {  właściwość  T  Item  ;  }; 

Metadane

Wszystkie programy WinRT udostępniają zadeklarowane klasy i członków poprzez metadane . Format jest taki sam, jaki został znormalizowany w ramach Common Language Infrastructure (CLI), standardu utworzonego na podstawie .NET Framework . Z tego powodu kod może być udostępniany w językach C++/CX, CLI i JavaScript, które są przeznaczone dla środowiska wykonawczego systemu Windows.

Biblioteka uruchomieniowa

C++/CX ma zestaw bibliotek przeznaczonych dla środowiska wykonawczego systemu Windows. Pomagają one połączyć funkcjonalność standardowej biblioteki C++ i WinRT.

Wykrywanie oparte na preprocesorze

Możesz wykryć, czy rozszerzenie C++/CX jest włączone, testując istnienie symbolu preprocesora __cplusplus_winrt .



 #ifdef __cplusplus_winrt  // Specyficzny kod C++/CX znajduje się tutaj...  #endif 

Zobacz też

Linki zewnętrzne