5
A
回答
1
我不知道很多關於MFC,但你的問題是相當平凡使用Boost.Serialization
struct MapData {
int m_int;
std::string m_str;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & m_int;
ar & m_str;
}
};
std::map< int, MapData > theData;
template<class Archive>
void serialize(Archive & ar, std::map< int, MapData > & data, const unsigned int version)
{
ar & data;
}
再後來是你想要做真正的歸檔解決:
std::ofstream ofs("filename");
boost::archive::binary_oarchive oa(ofs);
oa << theData;
這就是它。
(免責聲明:代碼只需在此框中,在所有沒有測試類型,錯字的意欲;)
7
在MFC中,我相信這是最簡單的先序列化地圖的大小,然後簡單地通過所有迭代要素。
如果使用std::map
或MFC的CMap
,但基於std::map
版本可能看起來像這樣沒有指定:
void MyClass::Serialize(CArchive& archive)
{
CObject::Serialize(archive);
if (archive.IsStoring()) {
archive << m_map.size(); // save element count
std::map<int, MapData>::const_iterator iter = m_map.begin(),
iterEnd = m_map.end();
for (; iter != iterEnd; iter++) {
archive << iter->first << iter->second;
}
}
else {
m_map.clear();
size_t mapSize = 0;
archive >> mapSize; // read element count
for (size_t i = 0; i < mapSize; ++i) {
int key;
MapData value;
archive >> key;
archive >> value;
m_map[key] = value;
}
}
}
如果讀取存檔,流媒體業務的一個錯誤發生時應該拋出一個異常,然後在更高層次上被框架捕獲。
相關問題
- 1. 使用MFC CArchive序列化指針(使用mfc100d.dll,CMemFile)
- 2. 我可以使用任何API在StreamSet中映射表列嗎?
- 3. MFC carchive to xml
- 4. 序列化:CArchive一個CImage
- 5. 可以將映射映射爲0嗎?
- 6. 使用SWIG的Perl中的STL映射
- 7. 可以使用Java UUID映射'_id'嗎?
- 8. STL映射迭代器可以通過遞增出界嗎?
- 9. 我可以依賴無序映射的順序嗎?
- 10. 我可以使用JPA將SQLServer XML列映射到Java中的字符串嗎?
- 11. 如果我打算使用任意類對象作爲鍵,我可以使用stl映射嗎?
- 12. 使用@JsonProperty序列化映射
- 13. 自動映射器可以映射分頁列表嗎?
- 14. 映射兩個數組...現在...我可以映射三個嗎?
- 15. 反序列化時,我可以使用映射的Jackson Mixin屬性創建JSON子類嗎?
- 16. 我可以在WCF服務中使用Json序列化嗎?
- 17. 使用Gson自定義序列化序列化枚舉映射
- 18. 我可以將不完整的sproc列映射到實體嗎?
- 19. 我可以在單個序列化程序的上下文中重寫Json.Net成員名稱映射嗎?
- 20. 可以使用引用類型作爲STL映射中的密鑰類型
- 21. @ManyToOne hibernate映射序列化
- 22. 我可以使用JPA將對象類型映射到表嗎?
- 23. 春季我可以結合使用@controller和XML bean映射嗎?
- 24. 我可以使用映射投影進行更新嗎?
- 25. 我可以使用Fluent NHibernate自動映射樹形結構嗎?
- 26. 我可以使用Newtonsoft.Json進行嚴格的反序列化嗎?
- 27. 解析Ruby中的CArchive(MFC類)文件
- 28. Delegates.observable()可以序列化嗎?
- 29. 我可以重載CArchive <<運算符以使用std :: string嗎?
- 30. 我可以使用AutoMapper將一個列表映射到另一個已經實例化的對象列表嗎?
謝謝! 使用boost是一個不錯的選擇。但是,我制定了使用CArchive的方法。我的方法的主要想法是序列化地圖的每個元素。 – user26404 2008-11-04 11:18:35