C++ と低レベルプログラミングと dynamic_cast

@SubaruG さん、@AoiMoe さん、@takawata19 さんが C++ と低レベルプログラミングを語ります
0
AoiMoe a.k.aしお兄P @AoiMoe

@SubaruG あれはたまに仮想関数使ってるくらいで、あんまり動的じゃないでしょう。普通の継承システムの上に構築されてる。今となっては古色蒼然とした印象を受けますけど。

2010-08-22 03:35:13
普通のC++使い、銀天すばる @SubaruG

dynamic_cast 関連は、C++の歴史でも一番深い部分だったと記憶している。や、STL以前のC++はあんまり詳しく知らないですけど。

2010-08-22 03:35:35
普通のC++使い、銀天すばる @SubaruG

@AoiMoe ですかね? 仮想継承とかを積極的に使ってる iostream が古くから標準ライブラリにあるのに、研究されてないとは考えにくいのですが。

2010-08-22 03:38:05
AoiMoe a.k.aしお兄P @AoiMoe

GUIの低レベルなところをやってると、やっぱりダウンキャストを安全にできる仕組みってのはかなり魅力的に感じるんだよなあ

2010-08-22 03:38:54
AoiMoe a.k.aしお兄P @AoiMoe

Xなんてあらゆるオブジェクトが「リソース」からのダウンキャストだからなあ

2010-08-22 03:39:44
AoiMoe a.k.aしお兄P @AoiMoe

@SubaruG ダウンキャストへの需要は大昔からあったものの、実際に「ダウンキャストは安全に出来ないからしないこと」という状態が長らく続いたので、実際にdynamic_castが入ってもあんまり積極的には使われてない印象

2010-08-22 03:41:48
普通のC++使い、銀天すばる @SubaruG

@AoiMoe 需要があったのなら研究されてるんじゃないですかね。研究されても安全にできなかったから使われないのでは。

2010-08-22 03:43:06
普通のC++使い、銀天すばる @SubaruG

@AoiMoe や、もしかしたらC++0xとかと組み合わせると凄い発展があるのかもしれませんが、dynamic_cast を使わないと困る状況ってのが、あんまりイメージできないというかなんというか。

2010-08-22 03:45:56
AoiMoe a.k.aしお兄P @AoiMoe

@SubaruG 本当に必要な人は dynamic_cast が入る前から自前で実装して使ってたりするんですけど、必要な場面とそうじゃない場面の差が激しいんですね。使わないでも何とかなるのが普通なので

2010-08-22 03:46:55
AoiMoe a.k.aしお兄P @AoiMoe

QtとかwxWidgetは、(今は知らんけど少なくとも昔は)dynamic_castみたいな仕組みを自前で持ってたりするので、ああいう方面にはやっぱり需要がある。

2010-08-22 03:50:35
AoiMoe a.k.aしお兄P @AoiMoe

逆に言うとああいう方面くらいにしか需要がない

2010-08-22 03:51:06
普通のC++使い、銀天すばる @SubaruG

どうしても dynamic_cast が必要な場合は boost::polymorphic_downcast を使うのが僕です。

2010-08-22 03:52:34
AoiMoe a.k.aしお兄P @AoiMoe

@SubaruG ダウンキャストは 9 割のケースで必要がないし、必要な場合の 9 割もそれで十分でしょうね。じゃあなんで dynamic_cast なんてあるんだよ、って話にもなるけれど

2010-08-22 03:55:03
普通のC++使い、銀天すばる @SubaruG

あるいはポインタじゃなくて参照使うとかー。むしろ、そっちの方がいいか。

2010-08-22 03:55:36
AoiMoe a.k.aしお兄P @AoiMoe

「polymorphic_cast の実装に必要だからある」とかそういう禅問答的な

2010-08-22 03:55:58
普通のC++使い、銀天すばる @SubaruG

今のC++のdynamic_castの仕様は、成功するかどうかが不明なダウンキャストの場合(本当にレアケース)に効率を最大限にするために存在するはず。

2010-08-22 04:00:23
普通のC++使い、銀天すばる @SubaruG

もし boost::polymorphic_cast のような、失敗時に例外を投げる仕様だと、例外処理のせいでパフォーマンスが劣化する。 dynamic_cast から polymorphic_cast を作るのは簡単だけど、その逆を最大効率で実装するのは無理。

2010-08-22 04:02:12
普通のC++使い、銀天すばる @SubaruG

ただ、失敗するかもしれないダウンキャスト、ってのは、本当に本当にレアケースなのですにゃ。 現状が妥当なのはわかるけど、 polymorphic_cast も標準ライブラリに入れる程度はして欲しかった。

2010-08-22 04:03:17
AoiMoe a.k.aしお兄P @AoiMoe

まあGUIのリソース周りなんかでは、やっぱり動的型情報は便利だったりするのだよ。

2010-08-22 04:05:46
普通のC++使い、銀天すばる @SubaruG

まぁ参照を使えってことだと思う。

2010-08-22 04:05:59
普通のC++使い、銀天すばる @SubaruG

dynamic_cast<Derived&>(base) は、ちゃんと失敗時に例外を投げてくれるよ!

2010-08-22 04:06:23
普通のC++使い、銀天すばる @SubaruG

えーマジ? ポインタ? キモーイ(ry

2010-08-22 04:07:10
普通のC++使い、銀天すばる @SubaruG

…ってのが dynamic_cast の規格を作った時の意見だったんだろう。知らんけど?

2010-08-22 04:07:49