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 {

        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

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at