Fichier d'en-tête des meilleures pratiques pour les typedefs

Je suis en utilisant shared_ptr et STL largement dans un projet, et cela conduit à de trop longues, le risque d'erreur de types comme shared_ptr< vector< shared_ptr<const Foo> > > (je suis un ObjC programmeur de préférence, où les noms longs sont la norme, et encore c'est beaucoup trop.) Il serait beaucoup plus clair, je crois, à l'appel de cette FooListPtr et la documentation de la convention de nommage "Ptr" signifie shared_ptr et "Liste", vecteur de shared_ptr.

C'est facile de typedef, mais elle provoque des maux de tête avec les en-têtes. Il me semble avoir plusieurs options d'où pour définir FooListPtr:

  • Foo.h. Qui entrelace tous les en-têtes et crée de graves problèmes de compilation, c'est donc un non-starter.
  • FooFwd.h ("forward-tête"). C'est ce que Effective C++ l'indique, basé sur iosfwd.h. C'est très cohérent, mais la surcharge de maintien de deux fois le nombre d'en-têtes semble ennuyeux au possible.
  • Commun.h (mettre tous ensemble dans un seul fichier). Cela tue la réutilisabilité en enlacent beaucoup de sans rapport avec les types. Maintenant, vous ne pouvez pas juste prendre un objet et le déplacer vers un autre projet. C'est un non-starter.
  • Une sorte de fantaisie #define magie qui typedef s'il n'a pas déjà été typedefed. J'ai un respectueux de l'aversion pour le préprocesseur parce que je pense qu'il rend difficile pour les nouvelles personnes pour analyser le code, mais peut-être que....
  • Utilisation d'un vecteur sous-classe plutôt qu'à une définition de type. Cela semble dangereux...

Sont là les meilleures pratiques ici? Comment peuvent-ils transformer en véritable code, lorsque la réutilisabilité, la lisibilité et la cohérence sont d'une importance primordiale?

J'ai marqué ce wiki de la communauté si d'autres veulent ajouter des options supplémentaires pour la discussion.

  • Puis-je vous demander pourquoi cette question est un wiki de la communauté?
  • si il y avait d'autres propositions, je suggère de les ajouter dans la liste pour le rendre plus facile pour plus tard lecteurs de voir les différentes options distinctes à partir des réponses sur leur mérite. Peut-être de la communauté wiki est utilisé différemment?
  • Et après plusieurs recherches, j'ai redécouvert ce que j'ai découvert la dernière fois que j'ai cliqué sur wiki de la communauté, qui est que je ne voulais pas le faire... j'espère que j'ai appris ma leçon cette fois.