C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 型はどのようにして保持している?


(過去ログ 100 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■59330 / inTopicNo.1)  型はどのようにして保持している?
  
□投稿者/ DD. (48回)-(2011/05/22(Sun) 17:43:27)

分類:[C/C++] 

お世話になります。DD.です。

疑問のレベルなのですが、
実行時、型をどのように認識/識別しているのでしょうか?

キャスト可能かどうかをどのように検出するのか?
例えば、dynamic_castでは、派生関係にある型かどうかをどのように検出するのか?

ご存知の方、ご回答頂ければと思います。


引用返信 編集キー/
■59332 / inTopicNo.2)  Re[1]: 型はどのようにして保持している?
□投稿者/ Azulean (747回)-(2011/05/22(Sun) 18:03:25)
No59330 (DD. さん) に返信
> 実行時、型をどのように認識/識別しているのでしょうか?

型に関する情報をコンパイル時に埋め込んでおくことで、それを参照することで実現しているはずです。
実行時型情報(RTTI)と呼ばれていますね。


> キャスト可能かどうかをどのように検出するのか?
> 例えば、dynamic_castでは、派生関係にある型かどうかをどのように検出するのか?

埋め込まれている型情報を元に判断すると思われますが、具体的に追究したことがないので説明できる状態ではありません。
なので、こちらはコメントできかねます。(ほかの方のコメント待ちと言うことで…)
引用返信 編集キー/
■59337 / inTopicNo.3)  Re[2]: 型はどのようにして保持している?
□投稿者/ επιστημη (2613回)-(2011/05/22(Sun) 19:33:39)
επιστημη さんの Web サイト
>>キャスト可能かどうかをどのように検出するのか?
>>例えば、dynamic_castでは、派生関係にある型かどうかをどのように検出するのか?

仮想関数をひとつも持たない場合dynamic_castできないことから察するに、
仮想関数テーブルに相乗りさせてんじゃないかしらねー > 型情報

引用返信 編集キー/
■59342 / inTopicNo.4)  Re[2]: 型はどのようにして保持している?
□投稿者/ DD. (50回)-(2011/05/22(Sun) 23:01:34)
Azuleanさん。回答ありがとうございます。

> 型に関する情報をコンパイル時に埋め込んでおくことで、それを参照することで実現しているはずです。
> 実行時型情報(RTTI)と呼ばれていますね。
> 埋め込まれている型情報を元に判断すると思われますが、具体的に追究したことがないので説明できる状態ではありません。
どこかに識別情報が埋め込まれているのか、他の情報から推測されているのか、
どうだろう?と思った次第ですので、あらかじめ埋め込まれているという情報を得られただけでもうれしいです。

引用返信 編集キー/
■59343 / inTopicNo.5)  Re[3]: 型はどのようにして保持している?
□投稿者/ DD. (51回)-(2011/05/22(Sun) 23:10:06)
επιστημηさん。回答ありがとうございます。

> 仮想関数をひとつも持たない場合dynamic_castできないことから察するに、
> 仮想関数テーブルに相乗りさせてんじゃないかしらねー > 型情報
なるほど。
型の識別情報をどこかに持たせているとして、
dynamic_castの際には、仮想関数テーブルを辿っていって、
相乗りさせている識別情報から参照させる。ですかね?

継承関係があるならば、仮想関数テーブルから辿っていけるほうが吉ってことですかね。

引用返信 編集キー/
■59720 / inTopicNo.6)  Re[3]: 型はどのようにして保持している?
□投稿者/ DD. (52回)-(2011/06/04(Sat) 15:55:34)
色々と回答頂きありがとうございます。

この質問に関しては、これで解決とさせて頂きます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -