shared_ptr on template class
Hi All, //////In short: If I have a templated class A<T>, within it, I want to typedef shared_ptr to it self, should I write: typedef shared_ptr< A<T> > PointerType; or typedef shared_ptr< A > PointerType; ? //////In more detail I have: template< typename T> class A { public: typedef shared_ptr< A<T> > PointerType; // or typedef shared_ptr< A > PointerType; // Further more static PointerType New() { return PointerType(new A<T>); // or return PointerType(new A); } }; Could I know if there's difference in between? Thanks! Yi Gao
Current C++ compilers won't let you typedef a template, only a specialization. But, within the class, the template itself means "this particular specialization", so where it works it means the same thing. I'd use the more explicit form in the typedef, and the shortcut only if using it directly in a parameter list or something where it is used many times. --John
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users- bounces@lists.boost.org] On Behalf Of Gao, Yi Sent: Wednesday, August 19, 2009 10:10 AM To: boost-users@lists.boost.org Subject: [Boost-users] shared_ptr on template class
Hi All,
//////In short: If I have a templated class A<T>, within it, I want to typedef shared_ptr to it self, should I write: typedef shared_ptr< A<T> > PointerType; or typedef shared_ptr< A > PointerType; ?
////
TradeStation Group, Inc. is a publicly-traded holding company (NASDAQ GS: TRAD) of three operating subsidiaries, TradeStation Securities, Inc. (Member NYSE, FINRA, SIPC and NFA), TradeStation Technologies, Inc., a trading software and subscription company, and TradeStation Europe Limited, a United Kingdom, FSA-authorized introducing brokerage firm. None of these companies provides trading or investment advice, recommendations or endorsements of any kind. The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.
Probably a bit offtopic, but I do the following when working with templated classes: typedef MyClass<P1> me; typedef boost::shared_ptr<me> pointer; so, later everything will depend on "me", for example: return pointer(new me); Also, this code could be reused when creating other classes.
typedef MyClass<P1> me; typedef boost::shared_ptr<me> pointer;
so, later everything will depend on "me", for example: return pointer(new me); Also, this code could be reused when creating other classes.
Note that this is not necessary: template <typename T> struct Foo { Foo foobar (); }; template <typename T> Foo<T> Foo<T>::foobar () { return Foo(); // << referred to Foo<T> implicitly } int main () { Foo<void> foo; Foo<void> phoo = foo.foobar(); } Inside the class declaration and inside corpora of member functions, the unqualified class name is an alias for the qualified one. Or did I misunderstood something? Sebastian Mach http://phresnel.org
participants (4)
-
Gao, Yi
-
John Dlugosz
-
Roman Shmelev
-
Sebastian Mach