Microsoft zwykł po prostu tworzyć system C ++, który umożliwia dostęp do ich Windows API (o nazwie win32), a następnie pewnego dnia wynalazł .NET i stwierdził, że wszystko musi się zmienić.
Stworzyli więc „Managed Extensions for C ++”, który był w zasadzie C ++, ale z mnóstwem niestandardowych rozszerzeń, dodając słowa kluczowe, __gc
które wspierają funkcje .NET (takie jak alokacja na stercie GC, a nie natywnym)
Ale ludziom się to nie podobało, bo tak naprawdę nie było; C C ++, z tymi wszystkimi dodatkowymi słowami kluczowymi, więc Microsoft przeprojektował go i nazwał C ++ / CLI, który miał znacznie mniejszy zestaw dodatkowych słów kluczowych, ale wprowadził zmiany składniowe takie jak ^
(który jest referencyjny „wskaźnik” do obiektu .NET na stercie GC).
Kilka lat później Microsoft zdał sobie sprawę, że .NET nie jest srebrną kulą, o której mówili, i połączyli również swoje walczące zespoły Windows i deweloperów. Część tej ponownej oceny doprowadziła do stworzenia zupełnie nowego Windows API, zwanego WinRT, który jest całkowicie natywnym kodem, co oznaczało, że stare rozszerzenia nie były już przydatne, więc Microsoft opracował swoje rozszerzenia C ++ do takiego, które działały z nowym Interfejs API WinRT jest łatwiejszy - dzięki zachowaniu kilku rozszerzeń z C ++ / CLI (takich jak ^).
A więc - proszę bardzo, 3 różne wersje rozszerzonego C ++, którym jest powierzchownie C ++. Przynajmniej najnowsza wersja jest znowu rodzimym kodem, więc nie musisz używać rozszerzeń, jeśli nie chcesz, ponieważ możesz uzyskać bezpośredni dostęp do interfejsu API (nazywa się WRL i przypomina stare klasy szablonów ATL)
Jeśli uważasz, że kodujesz kod między platformami, nie będziesz tego chciał - możesz zmienić wywołania interfejsu API, ale nie możesz używać go ^
na żadnym kompilatorze innym niż Visual C ++. Polecam korzystanie z interfejsu WRL API i utrzymanie standardowego kodu, ponieważ „dodatkowy kod”, który należy napisać w porównaniu do C ++ / CX, nie jest tak świetny.