Quelles sont les meilleures pratiques pour l'utilisation autoconf
conjointement avec shared_ptr
et autres C TR1/BOOST ++ modèles 0x de manière à maximiser la portabilité et maintenabilité?Comment utiliser autoconf avec C++ 0x fonctionnalités
Avec autoconf
je peux déterminer si shared_ptr
est disponible std::tr1::shared_ptr
et/ou boost::shared_ptr
. Étant donné que la même caractéristique a deux noms différents, je les questions suivantes:
- Dans le code, comment devrait
shared_ptr
être référencé? - Devrait-on préférer
std::tr1::shared_ptr
par rapport àboost::shared_ptr
?
Pour la première, le code utilise actuellement conditionals préprocesseur permettant des références non qualifiées à shared_ptr
, à la
#if HAVE_STD_TR1_SHARED_PTR
using std::tr1::shared_ptr;
#elif HAVE_BOOST_SHARED_PTR
using boost::shared_ptr;
#else
#error "No definition for shared_ptr found"
#endif
En second lieu, le code utilise std::tr1::
sur boost::
pour minimiser dépendances sur les bibliothèques externes (même si les bibliothèques sont largement utilisées).
Ces deux solutions sont-elles courantes? Y en a-t-il de meilleurs?
Je ne vois pas ce que votre modèle typedef ajoute au-delà de la suggestion de l'auteur original. Il a "pollué" les choses avec shared_ptr. Vous avez pollué des choses avec SharedPtr :: Type. Les deux semblent équivalents, et le sien implique moins de dactylographie. Que fait votre template typedef au-delà de l'instruction using dans le message d'origine? –
Vous l'atteignez: vous n'avez plus besoin de hisser ces noms dans l'espace de noms global. Ma méthode n'ajoute pas nécessairement de noms globaux. vous pouvez l'espace de noms si vous le souhaitez. Et si vous ne le faites pas, le mien est beaucoup moins susceptible d'entrer en conflit avec les noms d'une autre bibliothèque. –
Étant donné que shared_ptr sera éventuellement dans std :: et qu'autoclonf peut déterminer dans quel namespace shared_ptr est défini, je penche vers "namespace std {using :: shared_ptr;}" s'il n'y a pas std :: shared_ptr défini. –
themis