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

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

  在這個框架中包含了一個序列化的基本框架,一套基本的類型識別系統,可以識別基礎類型,復雜類型,自定義類型,STD的容器類型,而且可以這個基礎上進行遞歸的擴展。

  可以將復雜的數據結構序列化到文件,并從文件中恢復。

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

  正文

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

  在這個框架中包含了一個序列化的基本框架,一套基本的類型識別系統,可以識別基礎類型,復雜類型,自定義類型,STD的容器類型,而且可以這個基礎上進行遞歸的擴展。

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

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

  由于是用模板寫的比MFC中的運行時序列化框架在效率上的表現要好得多。使用起來也相當的簡單。如果要學習C++模板的高級技術,研究一下這個框架可以獲益良多。由于是框架代碼,我寫得相當規范,有注釋,也有完整的測試案例,可以進行自動的回歸測試。

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

  普通的數據類型:

(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模式下會在運行時引發一個斷言錯誤。在 RELEASE下會導致原來指針指向的對象被泄漏。


  對于普通數據類型的數組:

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

  非普通數據類型的數組:

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

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

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

  自定義數據類類型:

  不需要拷貝構造函數,不需要拷貝賦值函數,不需要析構函數的類。如老式的struct結構類型。這種類型可以通過直接拷貝內存而被高效的序列化及化序列化。只需要讓一個類從_data_class_tag派生,序列化框架就會將它當成普通的數據類類型處理。

  自定義復雜類型:

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

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類型:

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

  std::pair類型:

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

  std容器類型:

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

支持以上的容器類型,其中容器中的元素類型必須是序列化框架所支持的類型。
posted on 2008-07-19 13:15 chatler 閱讀(300) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

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

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>
            欧美欧美天天天天操| 欧美国产日韩视频| 国产精品免费在线| 午夜精品久久久久久久99樱桃 | 136国产福利精品导航网址| 久久精品国内一区二区三区| 欧美一区二区三区日韩视频| 国内不卡一区二区三区| 欧美成人乱码一区二区三区| 欧美黄色大片网站| 亚洲一区二区三区成人在线视频精品 | 国产伦精品一区二区三区照片91| 性欧美videos另类喷潮| 久久成人资源| 亚洲欧洲日本在线| a4yy欧美一区二区三区| 国产女主播在线一区二区| 久久综合九色| 欧美伦理视频网站| 羞羞色国产精品| 久久久久国产精品厨房| 亚洲精品综合久久中文字幕| 在线亚洲美日韩| 国产亚洲欧美日韩美女| 亚洲经典在线| 国产精品羞羞答答| 蜜桃伊人久久| 国产精品久久久久婷婷| 欧美a级一区| 国产精品久久久一区麻豆最新章节 | 亚洲电影下载| 中国女人久久久| 在线成人h网| 亚洲一区二区三区免费视频| 亚洲欧洲综合另类| 亚洲一区二区三区免费在线观看| 亚洲成色最大综合在线| 亚洲网站视频| 亚洲毛片在线| 久久国产主播| 亚洲在线国产日韩欧美| 久久香蕉国产线看观看网| 亚洲视频欧洲视频| 久久中文精品| 亚洲欧美日韩精品久久久久| 巨乳诱惑日韩免费av| 欧美在线视频一区二区| 欧美午夜精品理论片a级按摩| 久久综合一区| 国产欧美一区二区精品婷婷| 99精品欧美一区二区三区| 亚洲第一精品夜夜躁人人躁| 欧美亚洲日本国产| 亚洲伊人一本大道中文字幕| 欧美激情视频免费观看| 欧美成人黑人xx视频免费观看| 国产精一区二区三区| 99精品国产一区二区青青牛奶| 亚洲国产欧美日韩精品| 久久频这里精品99香蕉| 久久一区精品| 黄色国产精品一区二区三区| 久久国产精品毛片| 欧美一区二区免费| 国产精品久久久久久妇女6080 | 性色av香蕉一区二区| 欧美视频中文在线看| 夜夜嗨av一区二区三区| 亚洲在线黄色| 国产精品免费福利| 亚洲一级黄色| 欧美中文字幕在线播放| 国产亚洲一二三区| 欧美一区二区三区视频在线 | 亚洲国产精品成人| 久久综合一区二区三区| 欧美国产第一页| 91久久视频| 欧美另类高清视频在线| 99av国产精品欲麻豆| 在线视频你懂得一区| 欧美三级不卡| 亚洲一区二区三区久久| 久久国产免费看| 一色屋精品亚洲香蕉网站| 免费在线观看日韩欧美| 亚洲伦理自拍| 午夜日韩视频| 一区二区三区在线看| 欧美v亚洲v综合ⅴ国产v| 亚洲欧洲日夜超级视频| 亚洲欧洲av一区二区| 国产综合欧美在线看| 欧美成人久久| 亚洲午夜免费视频| 久久久999| 亚洲精品美女久久7777777| 国产精品国产三级国产aⅴ浪潮| 亚洲午夜羞羞片| 毛片基地黄久久久久久天堂| 日韩亚洲欧美综合| 国产拍揄自揄精品视频麻豆| 久热爱精品视频线路一| 在线亚洲精品| 免费日韩成人| 亚洲直播在线一区| 在线看片第一页欧美| 国产精品美女主播在线观看纯欲| 久久三级福利| 亚洲一区二区三区视频| 欧美成人tv| 欧美在线观看视频在线| 99热免费精品在线观看| 国产综合欧美在线看| 欧美日韩欧美一区二区| 久久九九热免费视频| 日韩性生活视频| 久久综合一区二区| 亚洲欧美日韩爽爽影院| 亚洲美女少妇无套啪啪呻吟| 激情久久影院| 国产精品久久婷婷六月丁香| 欧美wwwwww| 久久视频在线免费观看| 先锋影音久久| 一区二区三区 在线观看视频| 欧美99在线视频观看| 久久狠狠亚洲综合| 亚洲欧美韩国| 99视频精品全国免费| 亚洲精品美女在线| 亚洲国产精品www| 伊人久久久大香线蕉综合直播| 国产欧美精品一区二区色综合| 欧美日韩精品一二三区| 欧美成人三级在线| 久久手机免费观看| 久久久噜噜噜久久| 欧美一区免费视频| 久久aⅴ国产紧身牛仔裤| 亚洲影院高清在线| 亚洲影视在线播放| 亚洲欧美日韩专区| 亚洲影院免费观看| 午夜精品久久久久影视| 亚洲欧美一区二区原创| 亚洲欧美日韩国产| 午夜久久美女| 性欧美办公室18xxxxhd| 午夜免费日韩视频| 性感少妇一区| 久久久久久久性| 免费观看成人鲁鲁鲁鲁鲁视频 | 亚洲激情视频| 亚洲欧洲久久| 夜夜嗨av一区二区三区网站四季av| 亚洲精品一区二区三区四区高清| 欧美国产亚洲视频| 亚洲观看高清完整版在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲国产mv| 亚洲精品视频在线看| 中文日韩在线视频| 午夜在线不卡| 久久久精品免费视频| 欧美成ee人免费视频| 欧美天天在线| 国产日韩精品一区| 亚洲二区精品| 亚洲性视频网站| 久久久91精品国产一区二区三区| 免费看的黄色欧美网站| 亚洲精品视频在线看| 亚洲欧美日韩成人| 久久亚洲国产精品日日av夜夜| 欧美精品成人一区二区在线观看| 国产精品av一区二区| 国产在线视频不卡二| 亚洲精品免费在线观看| 亚洲欧美美女| 欧美激情精品久久久久久大尺度| 一本久道综合久久精品| 午夜精品久久久久久| 欧美高清在线视频| 国产麻豆午夜三级精品| 最新中文字幕一区二区三区| 亚洲一区二区三区涩| 久久久久综合一区二区三区| 日韩视频永久免费观看| 欧美一区二区三区在线观看| 欧美激情精品久久久久久大尺度| 国产精品视频最多的网站| 亚洲第一毛片| 亚洲欧美在线一区| 亚洲电影av在线| 亚洲一区二区三区四区五区黄| 欧美不卡视频一区| 国产一区二区三区免费不卡| 亚洲色诱最新| 欧美激情精品久久久|