¿Hay algún problema que pueda hacer que el sistema de generación de código de la Plantilla T4 de MS no sea adecuado para generar código C++?Plantillas T4: ¿adecuadas para generar código C++?
Respuesta
Puede generar cualquier texto que desee, incluido el código C++.
Un poco largo respuesta todavía creo que algunos podrían encontrar interesante
diría T4 es excelente para generar C++ con
Algunos podrían replicar que C++ ya cuenta con herramientas para hacer metaprogramming con como:
el preprocesador
Usando el preprocesador y macros de orden superior se puede lograr somewha t lo que puede hacer con la T4, pero me dicen que hay algunas ventajas muy convincentes de T4:
- El código generado a partir de T4 es fácil de depurar y comprender
- metaprogramming con T4 es más sencillo que con el preprocesador. El preprocesador puede hacer macros como máx/mín bastante fácil, pero cuando hablamos de plantillas basados en modelos se hace difícil
- T4 es más poderoso que el preprocesador lo que es más fácil desarrollar las plantillas
- T4 puede ser ejecutado como parte de la proceso de construcción o bajo demanda
parcial de la plantilla especialización
me encanta trucos plantilla de especialización parciales pero hablo por experiencia que no todo el mundo los quiere mantener.
Siempre me esforcé por reducir las redundancias de código en un esfuerzo por aumentar el mantenimiento. Además, prefiero los errores de tiempo de compilación sobre los errores de tiempo de ejecución cuando sea posible. Entonces, después de leer Modern C++ por Andrei Alexandrescu, pensé que encontré la respuesta .
Escribí un componente inspirado en este libro que funcionó muy bien, luego me fui de vacaciones. Cuando volví, el equipo había descartado el componente y había reescrito el suyo utilizando técnicas tradicionales. Contenía más código, era más complicado y no funcionaba tan bien, pero no podían encontrar la manera de agregar la funcionalidad al Componente que había escrito y determinaron que tenían que hacer esto. Nada podría ser rescatado. Estos eran tipos inteligentes también.
¿Se equivocaron al hacerlo? En términos de mantenibilidad, diría que hicieron la elección correcta, aunque me entristece.
Mi punto con este anechdote es que la T4 tiene algunas ventajas sobre trucos plantilla de especialización parciales:
- El código generado a partir de T4 es fácil de depurar y comprender
- T4 es más simple
- T4 es más poderosa
- T4 se puede ejecutar como parte del proceso de compilación o bajo demanda
- Si los mantenedores pueden familiarizarse con la plantilla T4, pueden rescatar el código (start mai) mantener el código generado y tirar la plantilla). Eso no fue posible en el anechdote de arriba.
Por supuesto, en C++ MetaProgramming es una combinación del preprocesador y la especialización de plantillas parciales.
Inconvenientes
hay inconvenientes con T4, por supuesto;
- Es Visual Studio específico (o Mono específico). Sin embargo, el código generado puede ser compilado por GCC y otros.
- Es no estándar
- Visual Studio no parece C++ Projects para apoyar T4, que me obliga a utilizar un proyecto .NET ficticia para generar el código frmo.
Concluyendo
en general me he perdido el interés haciendo avanzada metaprogramming C++ usando trucos de fantasía con el preprocesador o el sistema de tipos (hago uso de ellos para las tareas más simples aunque) y se basa en la T4 de eso en estos días.
Si alguien está interesado en una muestra sobre cómo hacerlo en C++, puede consultar InteractiveGraphics. Es una biblioteca para C#, VB, PowerShell y SmallBasic para hacer gráficos simples. Ahí utilizo T4 para generar todas las API y el código repetitivo para el envío de mensajes entre .NET y C++ (no uso C++/CLI si puedo evitarlo) todo) de un Modelo que describe la API. Agregar un nuevo método es tan simple como extender el modelo y regenerar todos los archivos de temlate, luego implementar un método abstracto en C++ y hacer las cosas divertidas.
Gracias - un ejemplo de generación de C++ usando T4 prácticamente responde mi pregunta con un Sí :). – mackenir
- 1. Comentarios en Plantillas T4
- 2. NHaml T4 plantillas para CRUD?
- 3. Operando plantillas T4 de otra plantilla T4
- 4. C# POCO T4 plantilla, generar interfaces?
- 5. Plantillas Spark T4 para ASP.NET MVC
- 6. Metaprogramación de plantillas C++: ¿es posible generar el código generado?
- 7. plazo t4 automáticamente las plantillas
- 8. Código/generador de plantillas para Java
- 9. Plantillas T4 personalizadas de ASP.NET MVC para vistas
- 10. ¿Cómo usar plantillas de generación de código T4 con proyectos VS C++?
- 11. Plantilla T4 para NHibernate? - No Fluido NHibernate
- 12. Crear plantillas T4 en tiempo de ejecución (tiempo de compilación)?
- 13. C# Cómo generar código a partir del código
- 14. T4 para generar POCOs sobre entidades LLBLGen Pro?
- 15. Ascendiendo el Directorio de Proyectos desde Plantillas T4
- 16. ¿Puedo usar T4 programáticamente desde C#?
- 17. Plantillas T4: evite las líneas vacías de los archivos incluidos
- 18. ¿para qué son adecuadas las tuplas?
- 19. Plantillas de texto para la generación de cadenas en tiempo de ejecución (como Razor o T4)
- 20. Generar solución para C++
- 21. Plantillas para AS3 (como C++)
- 22. ¿Alguien sabe de alguna plantilla T4 para generar clases de xsd?
- 23. ¿La edición VS 2010 Express admite plantillas preprocesadas T4?
- 24. Ejecutando múltiples plantillas T4 con un solo clic
- 25. Comenzando con T4
- 26. Código PHP para generar íconos
- 27. ¿Dónde están las plantillas Entity Framework t4 para anotaciones de datos?
- 28. Uso de una DSL para generar el código de C#
- 29. C código para generar y enviar un paquete
- 30. Generar gráfico de llamadas para el código de C++
Sí. Pregunta tonta, supongo. Aunque vi que puede especificar que el lenguaje de la plantilla sea VB o C#. ¿Esto se relaciona presumiblemente con la compilación automática de la salida de la plantilla? – mackenir
Sus plantillas se generan usando C# o VB, pero no creo que esto tenga nada que ver con la salida. –