Marmalade SDK を使用したシリアル化に問題があります。プリミティブのシリアル化などの原則は理解していますが、ポリモーフィック オブジェクトについてはどうでしょうか。
マーマレードの例によると、次のようにオブジェクトをシリアル化します。
void Serialise()
{
uint8 isObject;
if (IwSerialiseIsWriting())
// writing
{
// record whether m_Happy exists
isObject = m_Happy ? 1 : 0;
IwSerialiseUInt8(isObject);
// serialise out m_Happy if it exists
if (m_Happy)
m_Happy->Serialise();
}
else
// reading
{
IwSerialiseUInt8(isObject);
// if an object was written out then read it in
if (isObject)
{
// if m_Happy already exists then delete it
if (m_Happy)
delete m_Happy;
m_Happy = new CHappy;
// serialise in m_Happy
m_Happy->Serialise();
}
}
}
私の質問は、多相型がある場合にこのメソッドをどのように使用できるかということです。例えば:
私はオブジェクトを持っています:
AbstractClass *object;
シリアル化するとき、どうすればこのオブジェクトを正しく開始できますか? 簡単なマーマレードの例によると、次のようになります。
// reading
if(objectExists) {
object = new AbstractClass(); // uh oh
}