簡體   English   中英

Marmalade SDK的多態性和序列化

[英]Polymorphism and serialisation with the Marmalade SDK

使用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
}

要使用它,您需要在具體的子類之一上調用new。 例如 -

//Writing - 
AbstractClass *object = new ConcreteClass();
object->Serialise();

其中ConcreteClassAbstractClass的具體子類。 從理論上講,除非使用多態性,否則您不應僅擁有Abstract類的對象。

從序列化文件中讀取時,適用相同的代碼。 提示:您需要按照序列化對象/基元的順序反序列化它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM