C++のゼロオーバーヘッドルールは、(一応)コンパイル時間においても考慮されてるはず。 さすがに実行速度ほど重視はされないけど。
2010-08-22 02:52:31C++のdynamic_castは割と便利。仮想関数を一つ以上持ってる適当な Object とかそんな名前のクラスを基底にしといて、何でもかんでもその型で返すようにしといても、dynamic_castで安全に元の型を取り戻せる。正直それがC++らしいかといわれると疑問だが
2010-08-22 02:54:58class Object { public: virtual ~Object() = 0; }; inline Object::~Object() { } でおk
2010-08-22 02:56:05まあそういうスタイルは伝統的にC++のスタイルではないので馴染まないというだけで、バリバリそういう書き方をしても悪くはない。
2010-08-22 02:57:33まあ C++ 界隈ではどうも dynamic_cast ってハブられっ子みたいなところがあって、それを使ってるってだけで「お前は C++ の精神を何だと思ってるんだ!」みたいな目で見られたりする。華々しく話題にされるテンプレートと違って、話題にも上らない。
2010-08-22 03:02:55@kondoujp いやあ、ほら、たとえば Objective-C が何でもかんでも Object で返す、みたいなことを C++ でやると、割とアレな感じじゃないですか。
2010-08-22 03:06:29わたしゃもう vtbl みたいな仕組みがある時点で C++ を純粋な静的言語だとは見なしていないし、それなら dynamic_cast だってバリバリ使えばいいんじゃない、と思っていたりする派ではあるが
2010-08-22 03:13:32dynamic_cast を最後に使ったのって何時だろ…。と思ったけど結構頻繁に使ってた。 俺々スマートポインタの dynamimc_pointer_cast の実装に。 実用で使ったのは…一度もない気がする?
2010-08-22 03:17:45dynamic_cast のすごいところは、class A と B から派生した C を A 型として返しておいて B にキャストすることすら可能なところなんだよ、うん。まあこの辺まで来ると、多重継承の問題とかいろいろと絡んできて怖い人たちに怒られる
2010-08-22 03:18:34よーするにdlopen, dlsym で、クラスを完全に再現してくれたらいいんだけど...そもそもクラスそのものを操作するって方法ないんだよね。
2010-08-22 03:19:28よーするにdlopen, dlsym で、クラスを完全に再現してくれたらいいんだけど...そもそもクラスそのものを操作するって方法ないんだよね。
2010-08-22 03:19:28「そりゃ、一回class Cを経由すれば出来るの当たり前だろ」とか言う人もいるかもしれないけど、class Cの定義をdynamic_castするコードが一切知ってる必要がない、というのがポイントで
2010-08-22 03:21:11パワフルであることと実用上便利であることはあんまり関係ない気もするの。実用上便利なら、多少危険でも使う人は多い。暗黙変換とか。
2010-08-22 03:26:31単に便利な使い方を誰も研究してないだけのような気がするんだよなあ、dynamic_castに関しては。静的型言語だから、という固定観念が多分に影響してる気もする。
2010-08-22 03:29:23@AoiMoe C++は今でこそテンプレート指向言語ですけど、例えば iostream みたいに、昔は結構動的型も使ってたイメージがあるのですが…どうなのでしょう。
2010-08-22 03:31:02