2015-09-03 5 views
0

Я хочу сопоставить свои объекты по классам выполнения ... или уникальный идентификатор, который связывает их с их классом среды выполнения. Я не буду жёстко данные (например: CObject = 2, CObjectEx = 3)CMap с CRuntimeClass как ключ

CRuntimeClass имеет m_lpszClassName и m_wSchema (m_wSchema используется только для Implement_Dynamic классов, и у меня есть много последовательных классов, где схема 0, так это не сработает). возможно, CRunTimeClass *, который возвращает GetRuntimeClass(), может быть уникальным ключом?

Все ли объекты CObject типа CMyInheritedObject возвращают тот же самый указатель на объект CRuntmeClass? поэтому я мог бы использовать CRuntimeClass * как уникальный ключ для всех классов одного типа?

+0

Я могу использовать CRuntimeClass *, который возвращается CObject :: GetRuntimeClass() в качестве ключа для сопоставления объектов по их классу. – diox8tony

+0

Фактически, [CRuntimeClass :: m_wSchema] (https://msdn.microsoft.com/en-us/library/f9h5x2k4.aspx) используется только для классов, реализованных с использованием [IMPLEMENT_SERIAL] (https://msdn.microsoft.com). /en-us/library/a94da1y0.aspx). Он обозначает версию сериализованного формата при потоковой передаче в «CArchive» или для чтения. IMPLEMENT_SERIAL требует [IMPLEMENT_DYNCREATE] (https://msdn.microsoft.com/en-us/library/5fsfk9dy.aspx), чтобы потоковые объекты выходили из 'CArchive'. – IInspectable

ответ

1

Да CRuntimeClass всегда уникален для всех объектов данного типа. В противном случае IsKindOf и макросы MFC DYNAMIC_DOWNCAST не будут работать.

Если CMyInheritedObject использует макросы IMPLEMENT_, создаются соответствующие статические объекты.