青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
簡介

  在這個框架中包含了一個序列化的基本框架,一套基本的類型識別系統(tǒng),可以識別基礎(chǔ)類型,復(fù)雜類型,自定義類型,STD的容器類型,而且可以這個基礎(chǔ)上進(jìn)行遞歸的擴(kuò)展。

  可以將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)序列化到文件,并從文件中恢復(fù)。

  包含了完整的自動單元測試,和測試案例,點此下載。

  正文

  寫這個序列化框架最初是想用在一個大型的項目上,在那個項目中有一些相當(dāng)復(fù)雜的在運行時構(gòu)建出來的樹形數(shù)據(jù)結(jié)構(gòu),如果可以將這個內(nèi)存樹序列化起來可以大大節(jié)約下次創(chuàng)建的時間。另外在自己做的一些小工具中,有些數(shù)據(jù)想保存在文件中,以后再從文件中讀取,用序列化的方式也十分方便。而且那時正好系統(tǒng)的學(xué)習(xí)了一下C++模板技術(shù),感覺在一般的編程活動中很難用到一些比較高級的模板技術(shù),所以想用C++模板技術(shù)來寫這個序列化框架。最后那個項目中沒有使用這個序列化框架,但我至少達(dá)到了第二個目標(biāo),寫這個序列化框架讓我對C++模板技術(shù)有了更深層次的理解。

  在這個框架中包含了一個序列化的基本框架,一套基本的類型識別系統(tǒng),可以識別基礎(chǔ)類型,復(fù)雜類型,自定義類型,STD的容器類型,而且可以這個基礎(chǔ)上進(jìn)行遞歸的擴(kuò)展。

  在寫這個框架的同時,我也寫了完整的測試案例。如果沒有測試案例,要調(diào)試這樣的框架可就真是難與登天,因為模板方面的錯誤,編譯器報出來的信息很難看,有的根本就沒用。

  代碼是在VC7.1下寫的,也只能在VC7.1下用,VC6對于C++模板的支持非常有限,而其他的編譯器在這方面的支持也有出入。如果要用于其他的編譯器可能要修改部分類型識別方面的代碼。測試框架我用的是cppunit(1.9.14),這是個開源的測試框架,可以在www.xprogramming.com下載到。其中類型識別方面的代碼我主要是參考了《C++ template》一書,和boost中的部分代碼。

  由于是用模板寫的比MFC中的運行時序列化框架在效率上的表現(xiàn)要好得多。使用起來也相當(dāng)?shù)暮唵巍H绻獙W(xué)習(xí)C++模板的高級技術(shù),研究一下這個框架可以獲益良多。由于是框架代碼,我寫得相當(dāng)規(guī)范,有注釋,也有完整的測試案例,可以進(jìn)行自動的回歸測試。

  使用的方法比較簡單請參考(fileRWTest.cpp)文件中的測試案例。

  普通的數(shù)據(jù)類型:

(unsigned char, unsigned short, unsigned int, unsigned long, signed char, signed short, signed int, signed long, bool, char, wchar_t, unsigned long long, signed long long, float, double, long double)可以直接序列化及反序列化。

  對于指針類型:

  會序列化指針具體指向的對象,如果指針指向的對象的類型是序列化框架無法識別的類型會報出編譯錯誤。注意在反序列化時,只需要傳一個空指針即可,序列化框架會將被序列化的對象的值反序列化到堆上,并將地址付給指針。如果傳一個有值的指針,在DEBUG模式下會在運行時引發(fā)一個斷言錯誤。在 RELEASE下會導(dǎo)致原來指針指向的對象被泄漏。


  對于普通數(shù)據(jù)類型的數(shù)組:

  會將整個數(shù)組以內(nèi)存拷貝的方式序列化到內(nèi)存,即使沒被真正賦值的元素。反序列化時傳一個相同類型的數(shù)組即可。需要注意的是,傳進(jìn)的數(shù)組的容量必須大于或等于被序列化的數(shù)組的容量,否則會引發(fā)數(shù)組越界的內(nèi)存錯誤,在DEBUG模式下,會引發(fā)一個斷言錯誤。

  非普通數(shù)據(jù)類型的數(shù)組:

  數(shù)組元素的類型可以是除普通數(shù)據(jù)類型之外的所有被序列化框架所支持的類型。序列化時會針對每一個元素調(diào)用序列化框架對它的具體序列化特化,反序列化時亦然。由于在RELEASE模式下類類型的數(shù)組在申明后,編譯器會生成調(diào)用相應(yīng)類的缺省構(gòu)造函數(shù)的代碼。但對于原始類型,如指針數(shù)組類型如果不顯式的手工初始化,數(shù)組中的值是無意的隨機(jī)值。這種情況序列化框架無法識別,會贊成嚴(yán)重的內(nèi)存錯誤。另對于指針數(shù)組的某些元素為NULL的情況,序列化框架也無法處理,在DEBUG模式下會引發(fā)一個斷言錯誤。

  因些如果是指針數(shù)組除非數(shù)組中的元素全部為有意義的指針,否則不應(yīng)該做為一個數(shù)組來序列化,而應(yīng)該加入相應(yīng)的遍歷邏輯,將有意思的元素逐個序列化。

  對于一般的數(shù)組,如果有意思的只是其中的少部分元素,也應(yīng)該以上述方式進(jìn)行序列化,以提高性能。

  自定義數(shù)據(jù)類類型:

  不需要拷貝構(gòu)造函數(shù),不需要拷貝賦值函數(shù),不需要析構(gòu)函數(shù)的類。如老式的struct結(jié)構(gòu)類型。這種類型可以通過直接拷貝內(nèi)存而被高效的序列化及化序列化。只需要讓一個類從_data_class_tag派生,序列化框架就會將它當(dāng)成普通的數(shù)據(jù)類類型處理。

  自定義復(fù)雜類型:

  對于非數(shù)據(jù)類類型,必須從CSerializable派生,關(guān)在類的定義中加入SERIALIZABLE(name, x)宏,name是該類的名字,x是相應(yīng)的版本號。版本號的引入主要是避免在一個類被修改后,和以前生成的序列化文件一起使用,以免引起內(nèi)存錯誤。在類中還必須實現(xiàn)virtual bool Serialize(CMedia *) const;函數(shù),在該函數(shù)中寫具體的序列化代碼。該函數(shù)的內(nèi)容很簡單,按序列化及反序列化用為兩段,簡單的為每一個需要序列化及反序列化的成員函數(shù)調(diào)用即可,如下列:

if (pMedia->IsStoring()) {
 *pMedia << m_1 << m_2 << m_3 << m_4 << m_5;
 return true;
}
if (pMedia->IsLoading()) {
 *pMedia >> m_1 >> m_2 >> m_3 >> m_4 >> m_5;
 return true;
}

  注意序列化和反序列化的順序這要錯。

  std::string及std::wstring類型:

  使用比較簡單。值得注意的是和將字符串?dāng)?shù)組做字符指針用的情況一樣。如果申明了一個容量很大的string(一般是為了避免在追加時的內(nèi)存重分配開銷),卻只用了一小部分。序列化并反序列化,string對象的容量只是剛好有內(nèi)存的那部分。

  std::pair類型:

  只要是pair的first和second必須是序列化框架所支持的類型就可以被正常的序列化及反序列化。

  std容器類型:

(vector,list,deque,stack,queue,set,multiset,map,multimap)

支持以上的容器類型,其中容器中的元素類型必須是序列化框架所支持的類型。
posted on 2008-07-19 13:15 chatler 閱讀(296) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩妖精视频| 欧美日韩八区| 国产精品视频男人的天堂| 亚洲调教视频在线观看| 亚洲最快最全在线视频| 欧美午夜精品久久久久久人妖| 亚洲男女自偷自拍图片另类| 亚洲在线观看免费| 国产亚洲毛片在线| 欧美成人精品福利| 欧美日韩亚洲一区二区三区在线观看 | 在线播放日韩专区| 欧美国产日韩在线观看| 欧美理论电影网| 久久av资源网| 欧美成人午夜激情| 香蕉成人久久| 久久久免费精品视频| 99亚洲一区二区| 亚洲欧美日韩另类精品一区二区三区| 影音先锋成人资源站| 亚洲片国产一区一级在线观看| 欧美精品激情blacked18| 亚洲影院一区| 麻豆国产精品777777在线| 亚洲视频在线观看视频| 亚洲欧美三级在线| 久久久精品性| 亚洲一区二区久久| 欧美91精品| 久久国产成人| 欧美日本久久| 免费成人性网站| 国产精品久久夜| 91久久久久久久久| 狠狠色综合网| 午夜一区在线| 亚洲一区二区三区四区五区午夜| 久久人人爽爽爽人久久久| 亚洲女性裸体视频| 欧美日韩国产黄| 亚洲电影第三页| 国产综合自拍| 亚洲免费影院| 亚洲免费在线精品一区| 欧美激情中文不卡| 免费成人在线观看视频| 国产亚洲午夜| 午夜在线精品| 欧美在线观看天堂一区二区三区| 欧美日韩国产精品一卡| 亚洲福利在线观看| 雨宫琴音一区二区在线| 欧美中文字幕精品| 久久成人一区| 国产午夜精品全部视频播放| 亚洲在线观看免费视频| 亚洲欧美日韩国产综合| 欧美色图天堂网| 99国产精品私拍| 亚洲天堂免费观看| 欧美新色视频| 亚洲午夜91| 亚洲一区黄色| 国产精品久久午夜| 欧美亚洲在线观看| 久久久无码精品亚洲日韩按摩| 国产精品中文在线| 久久国产精品久久国产精品| 久久精品最新地址| 好吊色欧美一区二区三区视频| 香港成人在线视频| 久久久另类综合| 尤妮丝一区二区裸体视频| 久久久噜噜噜久久久| 欧美激情精品久久久久久蜜臀| 亚洲国产一二三| 欧美精品一区二区视频| 中日韩高清电影网| 欧美综合第一页| 激情成人av在线| 欧美成在线观看| 亚洲美女少妇无套啪啪呻吟| 亚洲一区二区三区中文字幕在线| 国产精品久久久久久超碰| 午夜精品一区二区三区电影天堂 | 亚洲毛片网站| 欧美特黄一级| 久久成人资源| 亚洲国产精品va在线看黑人动漫 | 亚洲午夜精品福利| 国产亚洲毛片在线| 亚洲精品黄色| 久久国产88| 午夜精品久久久久久99热| 韩曰欧美视频免费观看| 欧美精品福利| 欧美亚洲一区二区在线| 亚洲高清在线观看| 午夜精品视频在线观看一区二区| 国产亚洲欧洲一区高清在线观看 | 男人的天堂亚洲| 亚洲香蕉视频| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美bt| 亚洲国产精品久久精品怡红院| 欧美性做爰毛片| 久久婷婷国产综合尤物精品| 一本色道久久综合亚洲精品不卡| 久久精品亚洲一区二区| 一区二区三区欧美成人| 国产综合色在线| 欧美日韩中文字幕日韩欧美| 久久三级视频| 亚洲欧美在线一区| 9人人澡人人爽人人精品| 男人的天堂亚洲在线| 午夜激情亚洲| 99国产精品视频免费观看一公开| 黄色精品网站| 国产性猛交xxxx免费看久久| 欧美日韩国产综合视频在线观看| 久久久久.com| 午夜视黄欧洲亚洲| 亚洲视频第一页| 99国内精品久久久久久久软件| 免费久久99精品国产自| 久久国产精品电影| 香蕉久久一区二区不卡无毒影院 | 一区二区三区国产| 亚洲七七久久综合桃花剧情介绍| 免费黄网站欧美| 噜噜噜躁狠狠躁狠狠精品视频| 欧美一区二区视频97| 亚洲一区一卡| 亚洲一区二区三区成人在线视频精品 | 久久激情网站| 性欧美办公室18xxxxhd| 亚洲欧洲av一区二区| 亚洲婷婷在线| 亚洲视频在线播放| 亚洲深爱激情| 亚洲一区激情| 亚洲一区亚洲二区| 亚洲欧美国产一区二区三区| 亚洲视屏在线播放| 亚洲少妇在线| 午夜精品久久久久久久| 午夜精品剧场| 久久精品视频免费播放| 久久久999精品视频| 久久久人成影片一区二区三区| 久久亚洲精品伦理| 美国成人直播| 欧美日本一区二区高清播放视频| 欧美美女操人视频| 欧美色道久久88综合亚洲精品| 国产精品爱久久久久久久| 国产精品久久久久久久久久久久久| 国产精品av久久久久久麻豆网| 国产精品高潮呻吟久久av黑人| 久久动漫亚洲| 免费成人av在线看| 欧美日韩国产一区二区三区地区| 欧美日韩一区三区| 国产欧美日韩中文字幕在线| 伊人男人综合视频网| 99re6这里只有精品| 亚洲欧美国产精品va在线观看| 久久精品国产一区二区三| 玖玖精品视频| 日韩亚洲欧美一区二区三区| 亚洲欧美日韩精品综合在线观看 | 9l国产精品久久久久麻豆| 亚洲欧美日韩国产综合精品二区| 久久婷婷亚洲| 国产精品swag| 亚洲国产综合91精品麻豆| 亚洲综合视频在线| 欧美+亚洲+精品+三区| 亚洲免费av电影| 欧美在线影院在线视频| 欧美精品麻豆| 好吊成人免视频| 亚洲一二三级电影| 欧美jjzz| 亚洲欧美文学| 欧美日韩国产高清| 一区免费观看| 欧美一级专区| 亚洲精品国产视频| 久久综合伊人| 国产日韩欧美高清免费| 一区二区高清| 欧美大胆人体视频| 午夜精品免费| 欧美香蕉视频| 一区二区国产在线观看| 欧美承认网站| 欧美伊人久久久久久久久影院|