Estaba considerando asumir el desafío de aprender C ++ para diseñar aplicaciones de Metro y fue entonces cuando me encontré con C ++ / CX.
¿Se pueden codificar las aplicaciones de Metro en C ++ 11? ¿Requieren C ++ / CX para funcionar? ¿Y qué es exactamente C ++ / CX? ¿Es posible crear una aplicación Metro usando solo C ++, o se requiere C ++ / CX? Además, ¿cómo se vincula C ++ / CLI en esta imagen?
Respuestas:
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.fuente
Citando http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx :
fuente