Y a-t-il des problèmes qui pourraient rendre le système de génération de code T4 MS inutilisable pour générer du code C++?Modèles T4 - adaptés pour générer du code C++?
Répondre
Il peut générer n'importe quel texte, y compris du code C++.
Un peu longue réponse mais je pense que certains pourraient trouver intéressant
Je dirais T4 est excellent pour générer C++ avec
Certains pourraient rétorquer que C++ a déjà des outils pour faire Méta avec comme:
préprocesseur
Utilisation du préprocesseur et les macros d'ordre supérieur, vous pouvez obtenir somewha t ce que vous pouvez faire avec T4, mais je dis qu'il ya des avantages très convaincants de T4:
- Le code généré à partir T4 est facile à déboguer et à comprendre
- Méta avec T4 est plus simple que le préprocesseur. Le préprocesseur peut faire des macros comme max/min assez facile, mais quand on parle de modèles orienté modèle, il devient difficile
- T4 est plus puissant que le préprocesseur qui rend plus facile de développer les modèles
- T4 peut être exécutée dans le cadre du processus de construction ou à la demande
spécialisation modèle partiel
J'aime des trucs de spécialisation de modèle partiel mais je parle d'expérience que tout le monde aime les maintenir.
Je me suis toujours efforcé de réduire les redondances de code dans le but d'augmenter la maintenabilité. En outre, je préfère les erreurs de compilation sur les erreurs d'exécution lorsque cela est possible. Donc, après avoir lu Modern C++ par Andrei Alexandrescu je pensais que j'ai trouvé la réponse .
J'ai écrit un composant inspiré par ce livre qui a bien fonctionné, puis je suis parti en vacances. Quand je suis revenu, l'équipe avait jeté le composant et réécrit le leur en utilisant des techniques traditionnelles. Il contenait plus de code, était buggier et ne fonctionnait pas aussi bien mais ils ne pouvaient pas comprendre comment ajouter la fonctionnalité au composant que j'avais écrit et déterminé qu'ils devaient le faire. Rien ne pourrait être sauvé. Ce sont des gars intelligents aussi.
Aviez-vous tort de le faire? En termes de maintenabilité, je dirais qu'ils ont fait le bon choix même si cela m'attriste.
Mon point avec ce anechdote est que T4 a quelques avantages par rapport aux tours de spécialisation de modèle partiel:
- Le code généré à partir T4 est facile à déboguer et à comprendre
- T4 est plus simple
- T4 est plus puissant
- T4 peut être exécuté une partie de l'accumulation processus ou à la demande
- Si les mainteneurs peuvent obtenir leur tête autour du modèle T4 ils peuvent encore récupérer le code (début mai retirer le code généré et jeter le gabarit). Ce n'était pas possible dans l'anechdote ci-dessus.
Bien sûr, en C++, MetaProgramming est une combinaison du préprocesseur et de la spécialisation de modèle partielle.
Désavantages
Il y a des inconvénients avec T4 bien sûr;
- Il est spécifique à Visual Studio (ou spécifique à Mono). Cependant, le code généré peut bien sûr être compilé par GCC et d'autres.
- Il est non-standard
- Les projets Visual Studio C++ ne semblent pas prendre en charge T4, ce qui me force à utiliser un projet .NET factice pour générer le code frmo.
Emballage jusqu'à
Dans tout ce que j'ai perdu tout intérêt à faire avancé Méta C++ en utilisant des astuces de fantaisie avec le préprocesseur ou le système de type (je les utiliser pour des tâches plus simples cependant) et repose sur T4 que ces jours-ci.
Si quelqu'un est intéressé par un exemple sur la façon de le faire en C++, vous pouvez consulter InteractiveGraphics. C'est une bibliothèque pour C#, VB, PowerShell et SmallBasic pour faire des graphiques simples. Là j'utilise T4 pour générer toutes les API et le code standard pour le passage de messages entre .NET et C++ (je n'utilise pas C++/CLI si je peux l'éviter all) à partir d'un modèle décrivant l'API. L'ajout d'une nouvelle méthode est alors aussi simple que l'extension du modèle et la régénération de tous les fichiers temlate, puis j'implémente une méthode abstraite en C++ et fais les choses amusantes.
Merci - un exemple de génération C++ en utilisant T4 répond à peu près à ma question avec un Oui :). – mackenir
- 1. Générer du code C# pour la table Oracle
- 2. modèles T4 peuvent utiliser la même bibliothèque
- 3. Comment utiliser les modèles de génération de code T4 avec des projets VS C++?
- 4. Modèles T4 personnalisés ASP.NET MVC pour les vues
- 5. Comment utiliser des modèles dans une méthode T4 ClassBlock?
- 6. Comment générer du code C# à partir de fichiers WADL?
- 7. Est-ce que quelqu'un a des modèles d'exemple T4 qui peuvent être utilisés pour générer un service Web?
- 8. Comment actualiser le code généré par le gabarit SubSonic T4?
- 9. Modèles de tests unitaires pour le microcontrôleur C code
- 10. Générer DropDownList à partir du code derrière
- 11. Puis-je utiliser T4 par programmation à partir de C#?
- 12. Modèles T4 - SubSonic 3 - Exécution au moment de la construction
- 13. Utilisation du moteur de rendu aspx pour générer du code non
- 14. Affichage du code étendu du compilateur - C++
- 15. T4 Confusion
- 16. Problèmes de T4 Active Record et Linq T4
- 17. problème sur les modèles ActiveRecord pour SQLite
- 18. T4 vs CodeDom vs Oslo
- 19. Générer du code vectoriel à partir de Haskell?
- 20. Comment utiliser Linq dans un modèle T4?
- 21. Générer un code depuis Emacs
- 22. C# code pour cryptage
- 23. Comment générer des proxys d'interopérabilité COM en code source C#?
- 24. modèles de code Delphi utiles
- 25. Génération de code T4: types d'accès au projet en cours
- 26. Appel du code C++ visuel de C#
- 27. Obtention de l'emplacement d'un fichier .tt dans T4
- 28. Puis-je utiliser Visual Studio Snippets pour générer du code SQL?
- 29. Fermetures et modèles C++
- 30. Aide sur les modèles de modèles C++
Oui. Question idiote je suppose. Bien que j'ai vu que vous pouvez spécifier que la langue de modèle est VB ou C#. Cela se rapporte probablement à la compilation automatique de la sortie du modèle? – mackenir
Vos modèles sont générés en utilisant C# ou VB mais je ne pense pas que cela ait quelque chose à voir avec la sortie. –