Microsoft solía hacer simplemente un sistema C ++ que le permitiera acceder a su API de Windows (llamado win32), luego un día inventaron .NET y pensaron que todo tenía que cambiar.
Entonces crearon "Extensiones administradas para C ++", que era básicamente C ++ pero con una carga de extensiones no estándar, agregando palabras clave como __gc
para admitir características .NET (como la asignación en el montón de GC en lugar de la nativa)
Pero a la gente no le gustó esto, ya que en realidad no era; t C ++, que tenía todas esas palabras clave adicionales, por lo que Microsoft lo rediseñó y lo llamó C ++ / CLI, que tenía un conjunto mucho más pequeño de palabras clave adicionales pero introdujo cambios de sintaxis como el ^
(que es un 'puntero' de referencia a un objeto .NET en el montón de GC).
Unos años más tarde, Microsoft se dio cuenta de que .NET no es la bala de plata que dijeron que era, y también fusionaron sus equipos de Windows y Desarrolladores en combate. Parte de esta reevaluación condujo a la creación de una nueva API de Windows, llamada WinRT, que es un código completamente nativo y esto significaba que las extensiones antiguas ya no eran útiles, por lo que Microsoft desarrolló sus extensiones C ++ a una que hizo que trabajar con el nuevo WinRT API es más fácil: al mantener algunas extensiones de C ++ / CLI (como la ^).
Entonces, ahí tienes, 3 versiones diferentes de un C ++ extendido que es superficialmente C ++. Al menos la última versión es código nativo nuevamente, por lo que no necesita usar las extensiones si no lo desea, ya que puede acceder directamente a la API (se llama WRL y se parece mucho a las antiguas clases de plantillas ATL)
Si cree que podría estar codificando código multiplataforma que no desea, puede cambiar las llamadas a la API, pero no puede usar ^
en ningún compilador que no sea Visual C ++. Recomiendo usar la API WRL y mantener su código lo más estándar posible dado el 'código adicional' que necesitaría escribir en comparación con C ++ / CX no es tan bueno.