En cuanto a este artículo aquí la referencia a los genéricos en la última fila especifica que los genéricos son utilizado en C++/CX con interfaces y delegados.
http://msdn.microsoft.com/en-us/library/windows/apps/br212455(v=vs.110).aspx
Esto tiene sentido porque ya que se define como una interfaz que permite al compilador ++/CX C para compilar funciones de código nativo para los objetos reales, y luego usar interfaces genéricas de una manera similar a las plantillas de C++. El código nativo para las funciones se compila y la interfaz genérica se usa para trabajar con los diferentes tipos.
Para el compilador, parece que esta es la diferencia entre C++/CLR y C++/CX. /clr: clases genéricas, interfaces & delegados permitidos. /ZW: interfaces genéricas & delegados solamente.
Si mira aquí http://msdn.microsoft.com/en-us/library/windows/apps/hh699870(v=vs.110).aspx notará que no hay reglas genéricas para las clases.
Pero si lee este tema http://msdn.microsoft.com/en-us/library/windows/apps/hh755792(v=vs.110).aspx notará que los genéricos se aplican como interfaces.
Una "clase genérica" en C++/CX se logra mediante el uso de plantillas estándar de C++. La instanciación o el tipo específico generado por el compilador del genérico se exporta a los metadatos, pero no a la plantilla en sí. Por lo tanto, puede ver una MyClass y una MyClass a partir de los metadatos, pero no la MyClass original. Esto no es cierto para el caso de la interfaz genérica que se exporta a los metadatos como un tipo genérico.
Más información sobre esto se puede encontrar aquí http://en.wikipedia.org/wiki/Windows_Runtime
Así que para responder plenamente a la pregunta, a partir de este momento, el código de los métodos es el código nativo precompilado en el archivo DLL de salida o exe y se une a la no real clases genéricas PERO el código se puede usar genéricamente mediante el uso de interfaces genéricas. Entonces, diez clases diferentes pueden implementar IMyInterface y luego se puede usar una variable de tipo IMyInterface para trabajar con instancias de los diez tipos diferentes, por ejemplo.
Por lo tanto, la respuesta corta es que no hay nada como las clases genéricas completas en C++/CX que hay en C++/CLR. Use plantillas para el mismo efecto en aplicaciones C++/CX. Si debe tener genéricos de C++, utilice un dll creado con C++/CLI y trabaje ese código desde un programa compilado como C++/CX.
Nota! Obtuve mucho de examinar varios artículos y algunos de ellos en msdn parecen decir que podrían estar sujetos a cambios.
Ahora, usar las interfaces genéricas en C++/CX con plantillas es probablemente lo que pretenden. Así que crea una plantilla llamada MyClass y luego implementa su interfaz genérica llamada MyInterface, por lo que si luego creó una instancia de plantilla MyClass, el nuevo tipo implementará MyInterface automáticamente, y esta interfaz se podrá usar en cualquier lugar. Así que fuera del dll compilado y los archivos de cabecera, otros módulos y archivos C++/CX pueden funcionar con tipos como MyInterface sin necesidad del archivo de cabecera, porque la instanciación de la plantilla estaba dentro del dll compilado, pero un archivo C++ que utiliza los metadatos sabe cómo hacer el tipo MyInterface porque tiene los metadatos para MyInterface, pero no los metadatos para MyClass.
En resumen, no hay clases genéricas y la interfaz genérica y el soporte de delegados en C++/CX es todo lo que realmente funciona como genéricos en C++/CLI.
Huele como el enfoque "vamos a echar todo a Object y luego a volver" de Java a los genéricos. –
un genérico basado en tiempo de ejecución sería. El borrado de tipo genérico de C++ es boost :: any, pero no deberías hacer genéricos en tiempo de ejecución si no tienes que hacerlo, y la mayoría de la gente nunca tiene que hacerlo. Use plantillas en su lugar. –
Creo que es una cosa de tiempo de compilación. Cuando se encuentra una iniciación, como "MyTemplate obj;", el compilador generará una copia de la definición de clase concreta utilizando "MyTemplate" y "RealType", y luego la usará para crear el objeto. No hay nada de plantilla después de la compilación. –
Lyn