In MFC, ich glaube, es ist am einfachsten, zunächst die Größe der Karte serialisiert und dann einfach durch alle iterieren die Elemente.
Sie nicht angeben, wenn Sie std::map
oder MFC verwenden CMap
, sondern eine Version basierend auf std::map
könnte wie folgt aussehen:
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;
}
}
}
Wenn ein Fehler auftritt, wenn das Archiv zu lesen, einer der Streaming-Operationen sollten eine Ausnahme auslösen, die dann vom Framework auf einer höheren Ebene aufgefangen würde.
Vielen Dank! Boost ist eine gute Wahl. Ich habe jedoch den Ansatz der Verwendung von CArchive ausgearbeitet. Die Grundidee meines Ansatzes besteht darin, jedes Element der Karte zu serialisieren. – user26404