Microsoft era solito creare un sistema C ++ che permettesse di accedere alle API di Windows (chiamate win32), poi un giorno inventarono .NET e capirono che tutto doveva cambiare.
Così hanno creato "Managed Extensions per C ++" che era fondamentalmente C ++ ma con un carico di estensioni non standard, aggiungendo parole chiave come __gc
per supportare le caratteristiche .NET (come l'allocazione sull'heap GC piuttosto che su quella nativa)
Ma a questa gente non piaceva perché non era così; t C ++, con tutte quelle parole chiave extra, così Microsoft lo ridisegnò e lo chiamò C ++ / CLI, che aveva un insieme molto più piccolo di parole chiave aggiuntive, ma introdusse cambiamenti di sintassi come il ^
(che è un 'puntatore' di riferimento per un oggetto .NET sull'heap GC).
Alcuni anni dopo Microsoft ha realizzato che .NET non è il proiettile d'argento che hanno detto di essere, e ha unito anche i suoi team Windows e Developer. Parte di questa rivalutazione ha portato alla creazione di una nuovissima API Windows, chiamata WinRT, che è interamente codice nativo e questo significava che le vecchie estensioni non erano più utili, quindi Microsoft ha sviluppato le estensioni C ++ a una che ha reso possibile lavorare 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 il codice nativo, quindi non è necessario utilizzare le estensioni se non si desidera, poiché è possibile accedere direttamente all'API (si chiama WRL ed è molto simile alle vecchie classi di template ATL)
Se pensi che potresti codificare codice multipiattaforma che non vorresti, puoi cambiare le chiamate API, ma non puoi usare ^
su nessun compilatore diverso da Visual C ++. Ti consigliamo di utilizzare l'API WRL e di mantenere il tuo codice il più standard possibile, dato che il "codice extra" che avresti bisogno di scrivere rispetto a C ++ / CX non è così eccezionale.