Microsoft era solita creare un sistema C ++ che ti consentisse di accedere alla loro API di Windows (chiamata win32), quindi un giorno hanno inventato .NET e hanno pensato che tutto dovesse cambiare.
Così hanno creato "Managed Extensions for C ++" che era sostanzialmente C ++ ma con un carico di estensioni non standard, aggiungendo parole chiave come il __gc
supporto di funzionalità .NET (come l'allocazione sull'heap GC anziché su quello nativo)
Ma alla gente non piaceva come non era in realtà; t C ++, con tutte quelle parole chiave extra, quindi Microsoft lo ridisegnò e lo chiamò C ++ / CLI, che aveva un set molto più piccolo di parole chiave aggiuntive ma introdusse cambiamenti di sintassi come il ^
(che è un 'puntatore' di riferimento a un oggetto .NET sull'heap GC).
Qualche anno dopo, Microsoft ha capito che .NET non è il proiettile d'argento che hanno detto che fosse, e hanno anche unito i loro team Windows e Developer in conflitto. Parte di questa rivalutazione ha portato alla creazione di una nuovissima API di Windows, chiamata WinRT, che è interamente codice nativo e questo significava che le vecchie estensioni non erano più utili, quindi Microsoft ha sviluppato le proprie estensioni C ++ in una che ha reso il lavoro con il nuovo API WinRT più semplice - mantenendo alcune estensioni da C ++ / CLI (come ^).
Quindi - ecco qua, 3 diverse versioni di un C ++ esteso che è superficialmente C ++. Almeno l'ultima versione è di nuovo codice nativo, quindi non è necessario utilizzare le estensioni se non lo si desidera in quanto è possibile accedere direttamente all'API (si chiama WRL ed è molto simile alle vecchie classi di modelli ATL)
Se ritieni di poter codificare il codice multipiattaforma che non vorrai - puoi cambiare le chiamate API, ma non puoi usare ^
su nessun compilatore diverso da Visual C ++. Consiglio di utilizzare l'API WRL e di mantenere il codice il più standard possibile, dato il 'codice extra' che dovresti scrivere rispetto a C ++ / CX non è eccezionale.