![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@SubaruG あれはたまに仮想関数使ってるくらいで、あんまり動的じゃないでしょう。普通の継承システムの上に構築されてる。今となっては古色蒼然とした印象を受けますけど。
2010-08-22 03:35:13![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
dynamic_cast 関連は、C++の歴史でも一番深い部分だったと記憶している。や、STL以前のC++はあんまり詳しく知らないですけど。
2010-08-22 03:35:35![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@AoiMoe ですかね? 仮想継承とかを積極的に使ってる iostream が古くから標準ライブラリにあるのに、研究されてないとは考えにくいのですが。
2010-08-22 03:38:05![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
GUIの低レベルなところをやってると、やっぱりダウンキャストを安全にできる仕組みってのはかなり魅力的に感じるんだよなあ
2010-08-22 03:38:54![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@SubaruG ダウンキャストへの需要は大昔からあったものの、実際に「ダウンキャストは安全に出来ないからしないこと」という状態が長らく続いたので、実際にdynamic_castが入ってもあんまり積極的には使われてない印象
2010-08-22 03:41:48![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@AoiMoe 需要があったのなら研究されてるんじゃないですかね。研究されても安全にできなかったから使われないのでは。
2010-08-22 03:43:06![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@AoiMoe や、もしかしたらC++0xとかと組み合わせると凄い発展があるのかもしれませんが、dynamic_cast を使わないと困る状況ってのが、あんまりイメージできないというかなんというか。
2010-08-22 03:45:56![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@SubaruG 本当に必要な人は dynamic_cast が入る前から自前で実装して使ってたりするんですけど、必要な場面とそうじゃない場面の差が激しいんですね。使わないでも何とかなるのが普通なので
2010-08-22 03:46:55![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
QtとかwxWidgetは、(今は知らんけど少なくとも昔は)dynamic_castみたいな仕組みを自前で持ってたりするので、ああいう方面にはやっぱり需要がある。
2010-08-22 03:50:35![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
どうしても dynamic_cast が必要な場合は boost::polymorphic_downcast を使うのが僕です。
2010-08-22 03:52:34![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@SubaruG ダウンキャストは 9 割のケースで必要がないし、必要な場合の 9 割もそれで十分でしょうね。じゃあなんで dynamic_cast なんてあるんだよ、って話にもなるけれど
2010-08-22 03:55:03![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
今のC++のdynamic_castの仕様は、成功するかどうかが不明なダウンキャストの場合(本当にレアケース)に効率を最大限にするために存在するはず。
2010-08-22 04:00:23![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
もし boost::polymorphic_cast のような、失敗時に例外を投げる仕様だと、例外処理のせいでパフォーマンスが劣化する。 dynamic_cast から polymorphic_cast を作るのは簡単だけど、その逆を最大効率で実装するのは無理。
2010-08-22 04:02:12![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
ただ、失敗するかもしれないダウンキャスト、ってのは、本当に本当にレアケースなのですにゃ。 現状が妥当なのはわかるけど、 polymorphic_cast も標準ライブラリに入れる程度はして欲しかった。
2010-08-22 04:03:17