基底クラスのポインタから、継承クラスのサイズを求める
Posted: 2009年3月28日(土) 10:37
またお世話になります<(_ _)>
BCC Developer と DXライブラリ を使用している者ですが、
今、基底クラス enemy のポインタの集合を、標準ライブラリのdequeを用いて保存しています。
deque<enemy*> list;
enemy というクラスは、多数のクラスに継承しています。
listは、enemyを継承したクラスのポインタの集まりです。
つまり、goblin がenemyを継承したクラスとすると、
enemy* temp = new goblin();
list.push_back(temp);
のような感じです。(規約は読んでます。この方が読みやすいと思うので…)
継承したクラスによって、メンバー変数が変わりますから、ファイルサイズも変わってくるのですが、
このlistに保存されているポインタだけで、継承したクラスのサイズを求める事はできるのでしょうか?
sizeof(list[0]) ではポインタなので4バイト
sizeof(*list[0]) では、クラスenemy のサイズになってしまいます。
継承したクラス自体の重さはどのようにして求められるでしょうか?
*質問した理由
このデック list にある情報をすべてファイルに書き出そうと思ったのですが、
deque の中身を保存して完全に復元するには、中のデータを一個一個保存しなくてはならないと思ったため、
ひとつひとつのデータのサイズを求めようとした時に、つまづきました。
もし、ひとつひとつ保存する必要がない良い方法があるなら是非ご教授お願いします<(_ _)>
自分で考えてみた方法は、すべてのクラスに、ある仮想関数を設置して、その関数から、
どのクラスのポインタであるのか判断できるようすれば、サイズも分かる。という方法ですが、
なんだか、もっと良い方法がある気がします。
もしくは、そのクラスのサイズ自体返すとか。
(↑ return sizeof(this); とすればできるのかな?)
よろしくお願いします<(_ _)>
BCC Developer と DXライブラリ を使用している者ですが、
今、基底クラス enemy のポインタの集合を、標準ライブラリのdequeを用いて保存しています。
deque<enemy*> list;
enemy というクラスは、多数のクラスに継承しています。
listは、enemyを継承したクラスのポインタの集まりです。
つまり、goblin がenemyを継承したクラスとすると、
enemy* temp = new goblin();
list.push_back(temp);
のような感じです。(規約は読んでます。この方が読みやすいと思うので…)
継承したクラスによって、メンバー変数が変わりますから、ファイルサイズも変わってくるのですが、
このlistに保存されているポインタだけで、継承したクラスのサイズを求める事はできるのでしょうか?
sizeof(list[0]) ではポインタなので4バイト
sizeof(*list[0]) では、クラスenemy のサイズになってしまいます。
継承したクラス自体の重さはどのようにして求められるでしょうか?
*質問した理由
このデック list にある情報をすべてファイルに書き出そうと思ったのですが、
deque の中身を保存して完全に復元するには、中のデータを一個一個保存しなくてはならないと思ったため、
ひとつひとつのデータのサイズを求めようとした時に、つまづきました。
もし、ひとつひとつ保存する必要がない良い方法があるなら是非ご教授お願いします<(_ _)>
自分で考えてみた方法は、すべてのクラスに、ある仮想関数を設置して、その関数から、
どのクラスのポインタであるのか判断できるようすれば、サイズも分かる。という方法ですが、
なんだか、もっと良い方法がある気がします。
もしくは、そのクラスのサイズ自体返すとか。
(↑ return sizeof(this); とすればできるのかな?)
よろしくお願いします<(_ _)>