What's your convention for typedef'ing shared_ptr?

后端 未结 16 1632
北恋
北恋 2020-12-13 00:10

I\'m flip-flopping between naming conventions for typedef\'ing the boost::shared_ptr template. For example:

typedef boost::shared_ptr FooPtr;
         


        
16条回答
  •  醉梦人生
    2020-12-13 00:26

    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_;
    
    // usage examples:
    Foo* myFoo0;
    Foo_ myFoo1;
    

    I took advantage of three things:

    1. 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).
    2. That I only needed to come up with one typedef.
    3. 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_S;
    typedef weak_ptr   Foo_W;
    typedef unique_ptr 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★;
    typedef weak_ptr   Foo☆;
    typedef unique_ptr 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_ä.)

提交回复
热议问题