I'm flip-flopping between naming conventions for typedef'ing the boost::shared_ptr template. For example:
typedef boost::shared_ptr<Foo> FooPtr;
Before settling on a convention, I'd like to see what others use. What is your convention?
EDIT:
To those nesting the typedef inside Foo, doesn't it bother you that Foo is now "aware" of how it will be passed around? It seems to break encapsulation. How about this:
class Foo
{
public:
typedef std::vector<Foo> Vector
};
You wouldn't do this now, would you? :-)
I'd like too add some options to this old question, even though they might be highly controversial…
Similar to OldPeculier's answer I like short type names that resemble standard pointers as closely as possible.
In a project that used shared_pointer
almost everywhere, I used
typedef boost::shared_ptr<Foo> Foo_;
// usage examples:
Foo* myFoo0;
Foo_ myFoo1;
I took advantage of three things:
Foo* myFoo1;
over Foo *myFoo1;
for several reasons, and it matches nicely with Foo_ myFoo2
.When in need of typedefs for different kinds of smart pointers, I'd go for
typedef shared_ptr<Foo> Foo_S;
typedef weak_ptr<Foo> Foo_W;
typedef unique_ptr<Foo> Foo_U;
// usage examples:
Foo* myFoo2;
Foo_S myFoo3;
Foo_W myFoo4;
Foo_U myFoo5;
With increasing Unicode support in the standards and compiler implementations, I'd be tempted to try the following syntax, assuming that those star characters would be treated as a regular part of the type identifier. Of course this is only practical if all involved developers have a convenient text input method for this:
typedef shared_ptr<Foo> Foo★;
typedef weak_ptr<Foo> Foo☆;
typedef unique_ptr<Foo> Foo✪;
// usage examples:
Foo* myFoo6;
Foo★ myFoo7;
Foo☆ myFoo8;
Foo✪ myFoo9;
(A quick test indicated that this does not actually work, at least with my build environment. But the same is true for Foo_ä
.)