$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Dave Abrahams (abrahams_at_[hidden])
Date: 2000-05-30 15:05:59
--- In boost_at_[hidden], scleary_at_j... wrote:
> template <typename Base, typename Derived>
> Base * upcast(Derived * const d)
> { return static_cast<Derived *>(static_cast<Base *>(d)); }
>
> Should work for casting up hierarchy, fail for casting down or
across (with
> an error message like "cannot convert 'Derived *' to 'Base *'").
Will allow
> casting to the same type; a POSTULATE can easily be added to
prevent this if
> desired. More complicated tests not done :).
Nice. Who's maintaining casts.hpp? Can we put this in?
BTW, in my experience the hack someone suggested a while back to get
these things to work with MSVC6 doesn't work:
template <typename Base, typename Derived>
Base * upcast(Derived * const d, Base* = 0)
{ return static_cast<Derived *>(static_cast<Base *>(d)); }
The best thing I've been able to do, which isn't quite seamless, is
to build a class called upcast<Base> which is convertible to Base*
and has operator->() as well.
-Dave