【问题标题】:CMap with a CRuntimeClass as the key以 CRuntimeClass 为键的 CMap
【发布时间】:2015-09-03 14:46:46
【问题描述】:

我想通过它们的运行时类来映射我的对象...或将它们与它们的运行时类相关联的某个唯一 ID。我不会硬编码数据(例如:CObject = 2,CObjectEx = 3)

CRuntimeClass 具有 m_lpszClassName 和 m_wSchema(m_wSchema 仅用于 Implement_Dynamic 类,并且我有很多架构为 0 的串行类,所以这不起作用)。 GetRuntimeClass() 返回的 CRunTimeClass* 可能是唯一键?

所有 CMyInheritedObject 类型的 CObject 是否都返回完全相同的指向 CRuntmeClass 对象的指针?因此我可以使用 CRuntimeClass* 作为相同类型的所有类的唯一键?

【问题讨论】:

  • 我可以使用 CObject::GetRuntimeClass() 返回的 CRuntimeClass* 作为键来按类映射对象。
  • 其实CRuntimeClass::m_wSchema只用于使用IMPLEMENT_SERIAL实现的类。它指定序列化格式的版本,当流式传输到CArchive 或读回时。IMPLEMENT_SERIAL 需要IMPLEMENT_DYNCREATE,以允许从CArchive 流式传输对象。

标签: c++ stl mfc msdn


【解决方案1】:

是的,对于给定类型的所有对象,CRuntimeClass 始终是唯一的。否则 IsKindOf 和 MFC 宏 DYNAMIC_DOWNCAST 将不起作用。

如果 CMyInheritedObject 使用 IMPLEMENT_ 宏,则会创建相应的静态对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2023-01-27
    • 2019-12-12
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多