boost::polymorphic_cast

トップページ > 小道具 >

abstract

必要なヘッダ
<boost/cast.hpp>
出来ること
例外を投げる dynamic_cast
リファレンス
en / jp

sample

サンプルの動作確認バージョン [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

etc

C++標準の dynamic_cast はキャストに失敗すると 0 を返しますが、 このキャストは std::bad_cast 例外を投げます。 違いはそれだけ。

see also

presented by k.inaba (kiki .a.t. kmonos.net) under CC0