Microsoft fabriquait simplement un système C ++ qui vous permettait d'accéder à son API Windows (appelée win32), puis un jour, ils ont inventé .NET et ont pensé que tout devait changer.
Ils ont donc créé des "extensions gérées pour C ++" qui étaient essentiellement du C ++ mais avec une charge d'extensions non standard, ajoutant des mots clés comme __gc
pour prendre en charge les fonctionnalités .NET (comme l'allocation sur le tas GC plutôt que natif)
Mais les gens n'aimaient pas cela car ce n'était vraiment pas le cas; t C ++, ayant tous ces mots clés supplémentaires, alors Microsoft l'a repensé et l'a appelé C ++ / CLI, qui avait un ensemble beaucoup plus petit de mots clés supplémentaires mais a introduit des changements de syntaxe comme le ^
(qui est un «pointeur» de référence vers un objet .NET sur le tas GC).
Quelques années plus tard, Microsoft a réalisé que .NET n'était pas la solution miracle qu'ils l'avaient dit, et ils ont également fusionné leurs équipes Windows et Developer en lutte. Une partie de cette réévaluation a conduit à la création d'une toute nouvelle API Windows, appelée WinRT, qui est entièrement en code natif et cela signifiait que les anciennes extensions n'étaient plus utiles, alors Microsoft a développé leurs extensions C ++ pour en faire une qui rendait le travail avec le nouveau API WinRT plus facile - en conservant quelques extensions de C ++ / CLI (comme le ^).
Donc - voilà, 3 versions différentes d'un C ++ étendu qui est superficiellement C ++. Au moins, la dernière version est à nouveau du code natif, vous n'avez donc pas besoin d'utiliser les extensions si vous ne le souhaitez pas car vous pouvez accéder directement à l'API (elle s'appelle WRL et ressemble beaucoup aux anciennes classes de modèles ATL)
Si vous pensez que vous codez du code multiplateforme, vous ne le voudrez pas - vous pouvez modifier les appels d'API, mais vous ne pouvez pas utiliser le ^
sur un compilateur autre que Visual C ++. Je recommanderais d'utiliser l'API WRL et de garder votre code aussi standard que possible étant donné que le `` code supplémentaire '' que vous auriez besoin d'écrire par rapport à C ++ / CX n'est pas si bon.