サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <boost/cast.hpp>
struct Base
{
virtual ~Base(){}
};
struct Derived : public Base
{
virtual ~Derived(){}
};
int main()
{
using boost::polymorphic_downcast;
Base* b = new Derived;
...
Derived* d = polymorphic_downcast<Derived*>( b );
...
delete b;
return 0;
}
ダウンキャストには dynamic_cast
などを用いるのが普通ですが、
絶対に成功するとわかっているダウンキャストであれば、
static_cast
を用いても問題はありません。そこで、
Debug時には dynamic_cast
によって検証を行い、
リリース時には実行効率を重視するために static_cast
するというキャストを考えることができます。それがこれ。