0

我在使用 Marmalade SDK 进行序列化时遇到问题。我了解序列化原语之类的原则,但是多态对象呢?

根据 Marmalade 示例,您可以像这样序列化对象:

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
}
4

1 回答 1

0

要使用它,您需要在具体子类之一上调用 new 。例如 -

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

ConcreteClass的具体子类在哪里AbstractClass。从理论上讲,除非使用多态性,否则您不应该只拥有 Abstract 类的对象。

当您从序列化文件中读取时,同样的代码也适用。就像提示一样,您需要以序列化它们的相同顺序反序列化对象/基元。

于 2013-10-08T20:56:54.613 回答