ある派生クラスのオブジェクトを別のオブジェクトのプロパティとして保存したいと思います。
私にとっての問題は、格納されるオブジェクトのサイズを知ることです。これは、特定の基本クラスの任意の派生クラスである可能性があるためです。基本クラスのオブジェクトは小さいので、メモリを割り当てることはできません。typeof演算子も基本クラスのサイズを与えるだけだと思いますよね?
これが私のサンプルコードです。コメントを見て、私が何を意味するのかを理解してください。独創性がないので失礼します…</p>
BaseA {};
DerivedA1 : BaseA {public: void property() { cout << 1; }};
DerivedA2 : BaseA {public: void property() { cout << 2; }};
// etc. - several derived classes.
BaseB // Contains (or links to) an instance of class derived from BaseA.
{
public:
BaseA * instanceA;
BaseB (BaseA instanceAX)
{
// ??? => How to allocate memory for the object
// I don't know the real type of?
instanceA = new BaseA (instanceAX);
}
BaseB (BaseA instanceAX) { delete instanceA; }
};
main()
{
DerivedA1 instanceA1;
BaseB instanceB (instanceA1);
// Use "property" regardless of which derived class it belongs to.
instanceB.instanceA->property();
}
オブジェクト自体の代わりにポインタを格納することもできます。しかし、インスタンスinstanceBの存続期間中、プロパティオブジェクトを保持するために呼び出し元に依存したいかどうかはわかりません。
ありがとう!