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

@SubaruG さん、@AoiMoe さん、@takawata19 さんが C++ と低レベルプログラミングを語ります
C++
0
前へ 1 2 ・・ 5 次へ
普通のC++使い、銀天すばる @SubaruG

C++のゼロオーバーヘッドルールは、(一応)コンパイル時間においても考慮されてるはず。 さすがに実行速度ほど重視はされないけど。

2010-08-22 02:52:31
AoiMoe a.k.aしお兄P @AoiMoe

C++のdynamic_castは割と便利。仮想関数を一つ以上持ってる適当な Object とかそんな名前のクラスを基底にしといて、何でもかんでもその型で返すようにしといても、dynamic_castで安全に元の型を取り戻せる。正直それがC++らしいかといわれると疑問だが

2010-08-22 02:54:58
AoiMoe a.k.aしお兄P @AoiMoe

class Object { public: virtual ~Object() = 0; }; inline Object::~Object() { } でおk

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

っていうかC言語のコンパイルも十分遅い気がするんだけど。まぁ cygwin だからってのもあるけどさ。

2010-08-22 02:57:28
AoiMoe a.k.aしお兄P @AoiMoe

まあそういうスタイルは伝統的にC++のスタイルではないので馴染まないというだけで、バリバリそういう書き方をしても悪くはない。

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

C++の桁外れの遅さと比較したら神速なのは間違いない。

2010-08-22 02:58:38
AoiMoe a.k.aしお兄P @AoiMoe

dynamic_cast の効率ってどうなんだろうなあ。コンパイラによって結構違いそうな気もするんだよな

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

まあ C++ 界隈ではどうも dynamic_cast ってハブられっ子みたいなところがあって、それを使ってるってだけで「お前は C++ の精神を何だと思ってるんだ!」みたいな目で見られたりする。華々しく話題にされるテンプレートと違って、話題にも上らない。

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

@kondoujp いやあ、ほら、たとえば Objective-C が何でもかんでも Object で返す、みたいなことを C++ でやると、割とアレな感じじゃないですか。

2010-08-22 03:06:29
AoiMoe a.k.aしお兄P @AoiMoe

わたしゃもう vtbl みたいな仕組みがある時点で C++ を純粋な静的言語だとは見なしていないし、それなら dynamic_cast だってバリバリ使えばいいんじゃない、と思っていたりする派ではあるが

2010-08-22 03:13:32
AoiMoe a.k.aしお兄P @AoiMoe

ただまあ自分で書くときはもうちょっと保守的に書くわなあ

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

いずれにしても、飛び道具として見なされてるところはあるわな>dynamic_castによるダウンキャスト

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

dynamic_cast を最後に使ったのって何時だろ…。と思ったけど結構頻繁に使ってた。 俺々スマートポインタの dynamimc_pointer_cast の実装に。 実用で使ったのは…一度もない気がする?

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

dynamic_cast のすごいところは、class A と B から派生した C を A 型として返しておいて B にキャストすることすら可能なところなんだよ、うん。まあこの辺まで来ると、多重継承の問題とかいろいろと絡んできて怖い人たちに怒られる

2010-08-22 03:18:34
Takanori Watanabe 💉💉💉💉💉 @takawata19

よーするにdlopen, dlsym で、クラスを完全に再現してくれたらいいんだけど...そもそもクラスそのものを操作するって方法ないんだよね。

2010-08-22 03:19:28
Takanori Watanabe 💉💉💉💉💉 @takawata19

よーするにdlopen, dlsym で、クラスを完全に再現してくれたらいいんだけど...そもそもクラスそのものを操作するって方法ないんだよね。

2010-08-22 03:19:28
AoiMoe a.k.aしお兄P @AoiMoe

「そりゃ、一回class Cを経由すれば出来るの当たり前だろ」とか言う人もいるかもしれないけど、class Cの定義をdynamic_castするコードが一切知ってる必要がない、というのがポイントで

2010-08-22 03:21:11
AoiMoe a.k.aしお兄P @AoiMoe

実は恐ろしくパワフルなんだが、パワフルすぎて偉い人から「以後禁じてと致す」と宣言されてる感じ

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

パワフルであることと実用上便利であることはあんまり関係ない気もするの。実用上便利なら、多少危険でも使う人は多い。暗黙変換とか。

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

あ、ユーザー定義の暗黙変換、と限定すべきだったかにゃ。標準変換は無いとアレすぎるし。

2010-08-22 03:28:31
AoiMoe a.k.aしお兄P @AoiMoe

単に便利な使い方を誰も研究してないだけのような気がするんだよなあ、dynamic_castに関しては。静的型言語だから、という固定観念が多分に影響してる気もする。

2010-08-22 03:29:23
AoiMoe a.k.aしお兄P @AoiMoe

C++ の花形と言えばテンプレートによるジェネリックプログラミングですから。

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

@AoiMoe C++は今でこそテンプレート指向言語ですけど、例えば iostream みたいに、昔は結構動的型も使ってたイメージがあるのですが…どうなのでしょう。

2010-08-22 03:31:02
AoiMoe a.k.aしお兄P @AoiMoe

だいたい dynamic_cast って聞いただけで顔をしかめるのが正しい C++ プログラマ

2010-08-22 03:31:10
前へ 1 2 ・・ 5 次へ