Boost logo

Boost Users :

From: Jonathan Biggar (jon_at_[hidden])
Date: 2006-01-14 13:11:45


Pooyan McSporran wrote:
> I'm in the process of converting a large pile of legacy code which uses raw
> pointers to instead use boost::shared_ptr exclusively. I've got almost all
> of it converted and working, with one exception.
>
> Normally, given a type of Foo I define a smart pointer FooPtr, for example:
> class Foo;
> typedef boost::shared_ptr<Foo> FooPtr;
>
> But some code uses a templated type, for example:
> template<typename T> class Foo;
>
> Ideally, I'd use a templated typedef, for example:
> template<typename T> typedef boost::shared_ptr<Foo<T> > FooTPtr;
> but that is currently illegal in C++.
>
> Has anyone found a clean workaround?
>
> For now, I'll just do without a typedef in this case :)

You can drop a definition of the shared pointer inside the template class:

template<typename T> class Foo {
public:

        typedef shared_ptr<Foo> Ptr;

};

and then you could refer to it as Foo<T>::Ptr, although you'd need to
use "typename" in some circumstances.

-- 
Jonathan Biggar
jon_at_[hidden]

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net