$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Jean Llorca (yg-boost-users_at_[hidden])
Date: 2002-06-27 05:19:53
Hi,
I would like to propose, in the spirit of Bjarne Stroustrup book,
an upcast (where target inherits source).
template <class Target, class Source>
inline Target polymorphic_upcast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET)
{
typedef unsigned int uint;
uint offset = reinterpret_cast<uint>( static_cast<Source*>(
reinterpret_cast<Target>(1) ) ) - 1;
Target res = reinterpret_cast<Target>( reinterpret_cast<uint>( x ) -
offset );
assert( res == dynamic_cast<Target>(x) );
return res;
}
It would be faster to use the polymorphic_upcast, since it doesn't use
dynamic_cast in NDEBUG.
Regards,
Jean Llorca.