サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <iostream>
#include <boost/cast.hpp>
using namespace std;
struct Base
{
virtual ~Base(){}
};
struct Derived : public Base
{
virtual ~Derived(){}
};
int main()
{
using boost::polymorphic_cast;
Base* b = new Base;
Base* d = new Derived;
cout << "begin" << endl;
try
{
Derived* dp1 = polymorphic_cast<Derived*>( d );
cout << "cast_1" << endl;
Derived* dp2 = polymorphic_cast<Derived*>( b );
cout << "cast_2" << endl;
// bはDerivedを指していないのでキャスト失敗するはず
}
catch( bad_cast e )
{
cout << "catch" << endl;
}
cout << "end" << endl;
delete d;
delete b;
return 0;
}
begin cast_1 catch end
C++標準の dynamic_cast
はキャストに失敗すると 0 を返しますが、
このキャストは std::bad_cast
例外を投げます。
違いはそれだけ。