Salut les barbus!
Vous qui programmez (et je sais qu'il y en a, pas la peine vous cacher!), peut-être utilisez-vous l'éditeur Atom?
C'est ce que j'utilise, en tout cas pour développer en C++ sur mes différents joujoux (choux, cailloux, genoux, hiboux, joujoux, poux... oui c'est bien un x... Mais c'est bizarre à lire quand même), Arduino, ESP8266 et Teensy.
Et s'il y a bien une chose qui me fatigue, c'est de devoir toujours taper la même chose à chaque fois que je crée une nouvelle classe:
maclassequitue.h:
#ifndef MACLASSEQUITUE_H
#define MACLASSEQUITUE_H
class MaClasseQuiTue {
private: //private members
public: //public members
//MaClasseQuiTue constructor
MaClasseQuiTue();
};
#endif //MACLASSEQUITUE_H
maclassequitue.cpp:
#include "maclassequitue.h"
/**
* Constructor
*/
MaClasseQuiTue::MaClasseQuiTue(){
}
Ce n'est pas grand chose, mais c'est monstre rébarbatif de devoir se taper ça à chaque fois.
J'ai trouvé un plugin Atom permettant de créer des templates pour générer ce qu'on veut en deux coups de cuillère à pot. Il s'appelle Atom Smart Templates.
Une fois installé, voici comment j'ai créé ma template pour générer les deux fichiers à partir d'un nom de classe:
Le plus gros est fait :)
Voici le contenu de mon index.js:
module.exports = {
name: "C++ class",
directory: false,
params: ["ClassName"],
rules: function(config) {
return({
items: [
{ destinationFile: config["ClassName"].toLowerCase() + ".h", sourceTemplateFile: "header.template"},
{ destinationFile: config["ClassName"].toLowerCase() + ".cpp", sourceTemplateFile: "implementation.template"},
]
});
}
}
La variable params
contient la liste des paramètres à demander à l'utilisateur pour pouvoir générer les fichiers.
Chaque item généré dans la fonction rules
prend en source nos deux fichiers .template, et construit leurs noms finaux en fonction du paramètre ClassName qui a été saisi.
Ensuite, nous devons créer notre fichier header.template:
#ifndef <%= ClassName.toUpperCase() %>_H
#define <%= ClassName.toUpperCase() %>_H
class <%= ClassName %> {
private: //private members
public: //public members
//<%= ClassName %> constructor
<%= ClassName %>();
};
#endif //<%= ClassName.toUpperCase() %>_H
Et le fichier implementation.template:
#include "<%= ClassName.toLowerCase() %>.h"
/**
* Constructor
*/
<%= ClassName %>::<%= ClassName %>(){
}
Facile, non? Et surtout maintenant, quand je veux créer une nouvelle classe, je n'ai qu'à faire un clic droit dans le répertoire concerné, Create files from template, clic sur C++ class, je rentre le nom de ma classe et paf!