Früher erstellte Microsoft einfach ein C ++ - System, mit dem Sie auf die Windows-API (win32) zugreifen konnten. Eines Tages erfanden sie .NET und stellten fest, dass sich alles ändern musste.
Deshalb haben sie "Managed Extensions for C ++" erstellt, das im Grunde C ++ war, aber eine Menge nicht standardmäßiger Erweiterungen enthielt. Sie haben Schlüsselwörter hinzugefügt __gc
, um .NET-Funktionen zu unterstützen (wie das Zuweisen auf dem GC-Heap und nicht auf dem nativen).
Aber die Leute mochten das nicht, da es nicht wirklich C ++ war, da es all diese zusätzlichen Schlüsselwörter enthielt, also hat Microsoft es umgestaltet und C ++ / CLI genannt, das eine viel kleinere Menge zusätzlicher Schlüsselwörter enthielt, aber Syntaxänderungen wie das ^
(das ist) einführte Verweis 'Zeiger' auf ein .NET-Objekt auf dem GC-Heap).
Ein paar Jahre später stellte Microsoft fest, dass .NET nicht die Silberkugel ist, von der sie sagten, dass sie es ist. Außerdem haben sie ihre kämpfenden Windows- und Entwicklerteams zusammengeführt. Ein Teil dieser Neubewertung führte zur Erstellung einer brandneuen Windows-API mit dem Namen WinRT, bei der es sich ausschließlich um systemeigenen Code handelt. Daher waren die alten Erweiterungen nicht mehr nützlich. Daher entwickelte Microsoft ihre C ++ - Erweiterungen zu einer, die die Arbeit mit dem neuen ermöglichte WinRT-API einfacher - durch Beibehalten einiger Erweiterungen von C ++ / CLI (z. B. ^).
Also - los geht's, 3 verschiedene Versionen eines erweiterten C ++, das oberflächlich C ++ ist. Zumindest ist die neueste Version wieder nativer Code, sodass Sie die Erweiterungen nicht verwenden müssen, wenn Sie nicht möchten, da Sie direkt auf die API zugreifen können (sie heißt WRL und ähnelt weitgehend den alten ATL-Vorlagenklassen).
Wenn Sie denken, dass Sie plattformübergreifenden Code codieren, möchten Sie das nicht. Sie können die API-Aufrufe ändern, aber Sie können den ^
auf keinem anderen Compiler als Visual C ++ verwenden. Ich würde empfehlen, die WRL-API zu verwenden und Ihren Code so standardmässig wie möglich zu halten, da der zusätzliche Code, den Sie im Vergleich zu C ++ / CX schreiben müssen, nicht so großartig ist.