注意:
Boost的存檔方案基於對稱的輸入和輸出存檔類。這是乏味寫關於他們兩人的所有的時間,所以我會用?archive
爲指oarchive
和iarchive
。從boost :: archive :: text_oarchive_impl和boost :: archive :: text_iarchive_impl派生自定義存檔類
摘要:
我的自定義檔案的基礎類改變從binary_?archive_impl
到text_?archive_impl
後,我的自定義存檔類不再是「發現」當編譯器實例我在其他類serialize(...)
方法。
背景:
我的申請被成功讀取和寫入文件使用binary_?archive_impl
的子盤(文檔和/或代碼註釋推薦這種過度從binary_?archive
獲得)。我需要從二進制文件格式切換到文本格式,因此我將自定義歸檔的基類切換到text_?archive_impl
。那時一切都爆炸了。
問題:
我的自定義存檔類添加功能,包括不以助推基類存在着一些額外的方法;這些方法被稱爲在我的很多類的serialize(...)
方法,以及他們工作的罰款。從binary_?archive_impl
改變基類text_?archive_impl
後,我收到了全國各地抱怨說我的自定義方法在text_?archive
不存在的地方編譯錯誤。那麼,很明顯(!!!),但他們確實存在在我的定製檔案,他們工作就好了當我使用Boost的二進制基類。這是怎麼回事?
我發現了什麼,而我暫時的 - 但不良 - 解決方案:
撕裂我的頭髮和兜兜轉轉了大約一天後,這是我發現了什麼......
1)前一段時間(升壓1.34我相信),文件「binary_?archive.hpp」被分成「binary_?archive_impl.hpp」和「binary_?archive.hpp」(後者的#include前者)。這個不是完成「text_?archive.hpp」。 (因此,我將應用程序的#include行從「binary_?archive_impl.hpp」更改爲「text_?archive.hpp」。)
2)如果我將「text_?archive.hpp」分成兩部分部分和#只包含「..._ impl.hpp」頭文件,一切正常。 (但我真的不要想要修改我的Boost安裝!)
3)仔細查看這些頭文件並繞了一下,我發現如果我使用原始的,未修改的頭文件並註釋掉行
BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_oarchive)
(和text_iarchive
同樣),然後一切工作再次正常。 (順便說一下,我在我自己的存檔代碼中有類似的行來「註冊」我的自定義存檔。)
神祕,和我的困境:
A)爲什麼這些線的存在弄髒了的作品? ...爲什麼刪除它們會使事情發揮作用? ......我可以通過這樣做破壞什麼(不知道它)?
B)很久以前,爲什麼「text_?archive.hpp」文件而不是與「binary_?archive.hpp」文件分開? (庫是否損壞?是否應該修復?)
C)有沒有什麼方法可以在我的應用程序代碼中解決這個問題,而無需修改我的Boost安裝?
P.S.我正在使用Boost 1.48和Visual Studio 2010(64位)
P.P.S.我想所有的上述同樣適用於text_w?archive
我也注意到這些文件(在我的1.48安裝),但它們不是解決辦法。作爲一個臨時的解決方案,我已經完成了將'text_?archive'頭文件分割成單獨文件的工作,並且這些'.ipp'文件也需要修改。所以我有一個臨時解決方案,但是我仍然不知道這是否應該作爲庫中的錯誤報告,或者如果這些文件是正確的,我應該在代碼中做不同的事情。 – aldo