新手指南 序列化篇之三

2021-12-29 20:57:08 字數 2141 閱讀 5420

在前兩部分,我們學習了在通常情況下,如何為序列化提供有力的支援。在這一部分,我們將學習序列化任何一種物件時的特殊的規則。這裡有四個常用的參考例子。每個例子都由前乙個構成。

ø        序列化乙個簡單類

ø        序列化乙個派生類

ø        序列化乙個同源的聚集類

ø        序列化乙個異源的聚集類

我們的searialize()方法將返回以下狀態碼之一:

l        success

l        invalidformat

l        unsupportedversion

l        readerror

l        writeerror

序列化乙個簡單類

乙個「簡單類」的定義是:乙個即沒有父類,也沒有聚集類的物件。序列化乙個簡單的類需要以下步驟:

1.      序列化物件簽名和版本

2.      序列化物件成員(如果有)

在下面的例子中,類point包含兩個int型變數,表示點的座標。物件的簽名和版本定義成靜態成員(m_strsignature和m_nversion),所以每個point類的例項都共享它們。

int point::serialize

(carchive* parchive)

assert (parchive != null);

// step 1: serialize signature and version

int nversion;

try else else else {

cstring strsignature;

(*parchive) >> strsignature;

if (strsignature != coloredpoint::m_strsignature)

return (status::invalidformat);

(*parchive) >> nversion;

if (nversion > coloredpoint::m_nversion;)

return (status::unsupportedversion);

// step 2: serialize the base class

int nstatus = point::serialize (parchive);

if (nstatus != status::success)

return (nstatus);

// step 3: serialize members

if (parchive->isstoring())

(*parchive) << m_ncolor;

else

(*parchive) >> m_ncolor;

catch (cexception* pexception) {

// a read/write error occured

pexception->delete();

if (parchive->isstoring())

return (status::writeerror);

return (status::readerror);

// object was successfully serialized

return (status::success);

序列化乙個同源的聚集類

同源聚集類常常用來儲存數量不定的多個同型別物件。序列化同源聚集類需要以下步驟:

1.      序列化物件簽名和版本

2.      序列化物件的基類(如果有)

3.      序列化聚集物件的數量

4.      序列化每個聚集物件

5.      序列化物件的其它成員(如果有)

在下面的例子中,類coloredpointlist是乙個coloredpoint物件的聚集。為了簡單,coloredpointlist類使用cptrarray來儲存物件。如同所有序列化類一樣,coloredpointlist類也定義了乙個靜態簽名和版本。以下是coloredpointlist類的示例:

class coloredpointlist

// construction/destruction

public:

col

新手指南 序列化篇之一

序列化初步 翻譯 原著 http www.codeproject.com cpp serialization primer1.asp 序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素 乙個描述資料檔案的cfile物件 乙個提供序列化上下文的carchive物件 ...

新手指南 序列化篇之二

序列化初步 翻譯 原著 http www.codeproject.com cpp serialization primer2.asp 在第一部分,我們學到了如何通過carchive 類的serialize 函式來序列化乙個簡單物件。象下面的程式這樣 int cfoo serialize carchi...

新手指南 序列化篇之一

序列化初步 翻譯 原著 http www.codeproject.com cpp serialization primer1.asp 序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素 乙個描述資料檔案的 cfile物件 乙個提供序列化上下文的 carchive物...