Bonjour
Une question à propos de bonnes pratiques... m'est avis que je vais récolter des deux avis . Voici le problème: j'utilise des smarts pointers dans un projet, ceux de boost. Or, il se trouve que je trouve chiant d'écrire à chaque fois:
Parce que je trouve ça long, d'une part, et parce que je veux me réserver la possibilité (même si la probabilité est très faible) de ne pas être dépendant de boost et de pouvoir changer de smart pointer un jour si je veux. Alors j'écris dans mon header :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 boost::shared_ptr<MaClasse> variable etc bidule truc;
Et j'utilise MaClasse_var (par exemple) dans mon code. Comme je suis paresseux, ce qui est une qualité pour nous autres, informaticiens, j'ai écrit la macro DeclarePointers(MaClasse) (le prénom a été changé) qui définit les typedefs précédents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef boost::scoped_ptr<MaClasse> MaClasse_local; typedef boost::shared_ptr<MaClasse> MaClasse_var; typedef boost::weak_ptr<MaClasse> MaClasse_wref;
Il existe une seconde solution: écrire une classe de traits, que j'utiliserais par exemple de la manière suivante:
Ce qui reste un peu plus chiant à écrire mais économise une macro et a le mérite de ne compiler que les templates effectivement utilisés dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SmartPrt<MaClasse>::local // code ... SmartPrt<MaClasse>::var // code ... SmartPrt<MaClasse>::wref // code ...
Selon vous, quel serait la meilleure solution ? Pourquoi ?
Partager