Quel est votre convention pour typedef avec shared_ptr?

Je suis volte-face entre les conventions de nommage pour les typedef avec le boost::shared_ptr modèle. Par exemple:

typedef boost::shared_ptr<Foo> FooPtr;

Avant de s'installer sur une convention, j'aimerais voir ce que les autres utilisent. Qu'est-ce que votre convention?

EDIT:

À ceux de nidification de la définition de type à l'intérieur de Foo, n'est-ce pas vous déranger que Foo est maintenant conscient de la façon dont il sera passé autour? Il semble casser l'encapsulation. Comment à ce sujet:

class Foo
{
public:
    typedef std::vector<Foo> Vector
};

Vous ne feriez pas cela maintenant, voulez-vous? 🙂

  • Pour ajouter à cette question, comment gérer les en-tête de l'inclusion lorsque vous déclarez une telle typedef? N'est-ce pas le vent jusqu'causant chacun d'avoir à inclure des Foo.h (plutôt que de simplement dire "la classe Foo;"), ce qui conduit à ralentir construit et, éventuellement, des dépendances circulaires?
  • Je ne pense pas que le imbriquée typedef pauses encapsulation si vous utilisez une usine. En fait, je dirais que dans ce cas, il améliore l'encapsulation dans le cas où le pointeur de changement de type.
  • #include "foo_ptr.hpp" 😉
  • J'ai appeler une macro MYLIB_DECLARE_PTRS(Foo); pour remplacer class Foo;. Inspiré par le convention utilisée dans de Pixar USD --- j'ai aimé cette convention.