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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : 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;
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 : 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 ...
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 ?