$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Kevlin Henney (Kevlin.Henney_at_[hidden])
Date: 2000-01-14 04:25:27
Braden N. McDaniel wrote:
>> Is there any way to downcast a shared_ptr? That is, the effect of
>>
>> shared_ptr<Base> base(new Base);
>
>Um. Oops. The above line should of course be
>
> shared_ptr<Base> base(new Derived);
>
>> shared_ptr<Derived> derived(base);
The short answer is "no, not at the moment". It is unlikely that you would
want such a narrowing conversion to be implicit: A keyword cast is probably
the most appropriate solution, eg
template<typename Target, typename Source>
inline shared_ptr<Target> dynamic_shared_cast(const
shared_ptr<Source> & arg)
{
shared_ptr<Target> result;
if(Target * got = dynamic_cast<Target *>(arg.get()))
{
result.px = got;
delete result.pn;
++*(result.pn = arg.pn);
}
return result;
}
I recently raised this issue with Greg, who had been aware of it for some
time.
Kevlin