c++ - 我可以使用 CArchive 在 MFC 中序列化 STL 映射吗?

标签 c++ mfc stl map serialization

我需要把一个map的内容(key是int的ID,value是自定义的struct)写入一个文件,稍后从文件中加载。我可以在带有 CArchive 的 MFC 中完成吗?

谢谢!

最佳答案

在 MFC 中,我认为最简单的方法是首先序列化 map 的大小,然后简单地遍历所有元素。

你没有指定你使用的是 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;
    }
  }
}

如果在读取存档时发生错误,其中一个流操作应该抛出异常,然后由更高级别的框架捕获。

关于c++ - 我可以使用 CArchive 在 MFC 中序列化 STL 映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261215/

相关文章:

windows - 最小化/最大化框在 MFC 对话框编辑器中变灰

c++ - 如何设置 native 远程调试?

c++ - 用迭代器计算矩阵 vector<vector<double>> 的列和?

c++ - C++ 中的分配器用法(STL 树)

c++ - 从一个类访问私有(private)字段到另一个与 C++ 中的前一类无关的类(OOP)

c++ - 我应该删除一个指针吗?

c++ - 可以在 C++ 代码而非 C 代码上完成 'easily' 的编译器优化示例

C++ 多重继承和虚拟继承

c# - 寻找有关创建 C++ DLL 然后在 C# 中进行 P/Invoke 的代码示例(适用于 Windows CE 5/6)

c++ - 分层组件存储结构