Class de traits ou pr�processor ?
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:
Code:
1 2
|
boost::shared_ptr<MaClasse> variable etc bidule truc; |
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:
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; |
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.
Il existe une seconde solution: �crire une classe de traits, que j'utiliserais par exemple de la mani�re suivante:
Code:
1 2 3 4
|
SmartPrt<MaClasse>::local // code ...
SmartPrt<MaClasse>::var // code ...
SmartPrt<MaClasse>::wref // code ... |
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.
Selon vous, quel serait la meilleure solution ? Pourquoi ?