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:
- That the underscore character somehow looks like an operator, yet is treated mostly like a letter, so that it can be part of an identifier (and I see no rule forbidding it at the end of the identifier).
- That I only needed to come up with one typedef.
- I prefer
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_ä.)
#include "foo_ptr.hpp";-)MYLIB_DECLARE_PTRS(Foo);to replaceclass Foo;. Inspired by convention used in Pixar's USD --- I loved this convention.