Quelque chose que je me suis fait souvent ces derniers temps est de déclarer typedefs pertinents pour une classe à l'intérieur de cette classe, c'est à dire
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Ces types sont ensuite utilisés ailleurs dans le code:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Raisons pour lesquelles je l'aime:
- Il réduit le bruit introduit par les modèles de classe,
std::vector<Lorem>
devientLorem::vector
, etc. - Il sert comme une déclaration d'intention - dans l'exemple ci-dessus, le Lorem classe est destinée à être un décompte de références via
boost::shared_ptr
et stocké dans un vecteur. - Il permet la mise en œuvre de changer - c'est à dire si Lorem besoin d'être modifié pour être intrusif, d'un système de référence comptés (via
boost::intrusive_ptr
) à un stade ultérieur, ce qui aurait un impact minimal sur le code. - Je pense qu'il est 'beau' et est sans doute plus facile à lire.
Raisons pour lesquelles je ne l'aime pas:
- Il y a parfois des problèmes avec dépendances - si vous souhaitez intégrer, par exemple, un
Lorem::vector
dans une autre classe, mais seulement besoin (ou envie) de déclarer avant le Lorem (par opposition à l'introduction d'une dépendance sur son fichier d'en-tête), puis vous finissez par avoir à utiliser les types explicites (par exemple,boost::shared_ptr<Lorem>
plutôt que d'Lorem::ptr
), ce qui est un peu incohérent. - Il peut ne pas être très commun, et donc plus difficile à comprendre?
J'essaie d'être objectif avec mon style de codage, de sorte qu'il serait bien d'avoir quelques autres opinions sur elle afin que je puisse disséquer mon réfléchir un petit peu.