w MFC, sądzę, że to najłatwiejszy do pierwszego serializacji rozmiar mapy, a następnie po prostu iterację wszystkich elementy.
Nie określono jeśli używasz std::map
lub MFC CMap
, ale wersja na podstawie std::map
mógłby wyglądać następująco:
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;
}
}
}
W przypadku wystąpienia błędu podczas odczytu archiwum, jedna z operacji strumieniowych powinien wyrzuć wyjątek, który następnie zostanie przechwycony przez framework na wyższym poziomie.
Dziękujemy! Używanie doładowania to dobry wybór. Jednak opracowałem podejście polegające na używaniu CArchive. Główną ideą mojego podejścia jest serializacja każdego elementu mapy. – user26404