55 votes

Quelle est votre convention pour la typedef'ing 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:

Pour ceux imbrication 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? :-)

31voto

pdusen Points 172

Réponse: ne le fais pas. C'est pratique pour vous et pour personne d'autre. Dis ce que tu veux dire.

15voto

James McNellis Points 193607

Ma préférence:

 class Foo
{
public:

    typedef boost::shared_ptr<Foo> SharedPointer;
};
 

Le problème avec seulement FooPtr est que vous pouvez avoir différents types de pointeurs (par exemple, weak_ptr s). Je ne me soucie pas non plus beaucoup des abréviations, mais c’est un tout autre problème.

5voto

Nathan Ernst Points 3079

Personnellement, dans le code, je suis responsable, vous devez généralement voir un FooPtr typedef serais dans le même espace de noms portée de Toto et Toto contient un génériquement appelé 'SmartPtr' typedef pour le même type que FooPtr. Ayant FooPtr permet de faire facilement un non-verbose manuel d'utilisation. avoir la imbriquée définition de type pour 'SmartPtr" ou équivalant facile d'utilisation générale dans les modèles, macros, etc. sans avoir à connaître que le type réel de l'pointeur intelligent.

Aussi, je suggère l'ajout d'un "subjectif" de la balise à cette question.

4voto

peterchen Points 21792

J'ai utilisé à la fois l'extérieur et encapsulé typedef, mais a terminé avec la première,

typedef boost::shared_ptr<Foo> FooPtr; 

uniquement parce que dans le combiné d'expressions, cela paraît plus propre que Foo::Ptr.

N'est-ce pas vous déranger que Foo est maintenant conscient de la façon dont il sera passé autour?

Assez souvent, ces classes sont réalisable grâce à une méthode de fabrique uniquement:

struct Foo
{
     static FooPtr Create() { return FooPtr(new Foo); }

   protected:
     Foo() {}
}

C'est le genre de "plus fort" que l'encapsulation de la définition de type, encore un schéma très commun.

2voto

Nate Points 1193

Je ne suis pas un grand fan des conventions de nommage hongroises, j'utilise généralement:

 typedef boost::shared_ptr<Foo> FooSharedPtr;
 

Assez détaillé pour être clair mais assez court pour ne pas être un gros problème. Dans tous les cas, j'indiquerais certainement que c'est spécifiquement un pointeur partagé, surtout si vous n'êtes pas le seul à utiliser ce type à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X