web-dev-qa-db-fra.com

Génération de code C/C++ basée sur des modèles

Toute suggestion pour le générateur de code de base de modèle pour C/C++ spécifiquement pour générer une génération de code répétitive? (Ce n'est pas basé sur un modèle UML/MATLAB ou autre matériel avancé). Pour un débutant dans ce domaine, un bon tutoriel générique (non basé sur un outil)?

Je suis tombé sur GNU Autogen a l'air bien mais semble avoir besoin d'une courbe d'apprentissage abrupte. Je préférerais un plug-in pour Eclipse comme IDE, facile à utiliser et surtout de bons tutoriels.

18
Kamath

Le concept de base de la génération de code est assez simple - et les besoins des personnes sont suffisamment variés - pour qu'il y ait plusieurs options.

  • Boost.Preprocessor est une bibliothèque de fonctions construite sur le préprocesseur C/C++ standard, qui simplifie considérablement l’utilisation du préprocesseur pour générer du code. Ce n'est pas aussi flexible que les autres options, et il est parfois difficile de détecter les erreurs de préprocesseur, mais le fait qu'il utilise uniquement des fonctionnalités de langage standard simplifie grandement son utilisation et son intégration dans vos versions.
  • Si vous connaissez Python, il y a Cog .
  • Certains projets de Google utilisent Pump .
  • Il existe de nombreuses solutions de gabarit universelles ( Genshi , eRuby , etc. de Python). Celles-ci sont souvent conçues pour générer du HTML et du XML, mais fonctionnent également pour du code.
  • Il est également assez facile de pirater quelque chose dans le langage de script de votre choix.

Sans en savoir plus sur vos besoins et sur les outils avec lesquels vous êtes à l'aise, je ne peux pas vous donner de recommandation plus précise.

Je ne connais rien qui propose un plugin Eclipse.

11
Josh Kelley

Si vous connaissez Python, alors Cog pourrait être considéré comme une solution légère: http://www.python.org/about/success/cog/

3
Rost

Regardez ma réponse à une question similaire pour Java classes en utilisant M2T-JET, un générateur de modèles léger basé sur Eclipse. JET est agnostique dans les langues et vous pouvez voir dans l'exemple qu'il est assez facile à utiliser. 

1
Chris Gerken

J'apprécie d'utiliser Lua pour cette tâche, avec quelque chose comme Templet ou l'un des nombreux autres préprocesseurs basés sur Lua. L'avantage d'utiliser Lua sur quelque chose comme Python est que vous pouvez, si nécessaire, inclure le code source dans votre processeur de gabarit et une installation Lua de base avec ce que vous envoyez. Vous pouvez ensuite ajouter la compilation de Lua et les fichiers de modèle ultérieurs au processus de construction comme d’habitude.

Je conseillerais de ne pas utiliser les solutions basées sur Python pour une raison: jongler avec différents pythons pour satisfaire l'utilisation par chaque développeur d'une version complètement différente mais incompatible est ennuyeux. Si vous choisissez d'utiliser un langage que vous ne pouvez pas intégrer dans vos arborescences, assurez-vous que des versions pré-calculées sont disponibles.

1
Skrylar

En retard à la fête, mais je recommanderais Codeworker C'est le seul outil que j'ai trouvé qui fait tout ce que les outils ci-dessus font et plus. Il a la même fonctionnalité que Cog Python pour la génération intégrée, il a la génération basée sur des modèles comme Templet ou Pump. Et il a la fonctionnalité plutôt utile des zones protégées afin que vous puissiez personnaliser votre code et le générer à nouveau.

Je l'ai utilisé pour générer tout le code c ++ de la plaque de la chaudière ainsi que pour la configuration de projets tels que SQL, config, javascript, etc.

0
Ronnie